第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Unix 時間/紀元時間:日期表示還是時間塊?

Unix 時間/紀元時間:日期表示還是時間塊?

GCT1015 2023-05-24 16:01:26
我最近接手了數(shù)據(jù)庫的一些職責(zé),其中一個字段是“工作時間”。這在 MySQL 中表示為 VARCHAR,格式如下:'1970-01-01 00:05:46'(示例)所有條目都以 1970-01-01 hh:MM:ss 開頭并具有相同的格式。我想弄清楚這是否僅表示一天中的日期和時間,或者總花費的時間(例如完成客戶 x 的手機維修需要 2 小時 20 分鐘)。如果這代表時間量,我如何將其轉(zhuǎn)換為正常的小時/分鐘/秒單位集?
查看完整描述

4 回答

?
縹緲止盈

TA貢獻2041條經(jīng)驗 獲得超4個贊

我只是在這里猜測??雌饋砟目蛻舳耸盏搅四承┻M程完成所需的毫秒數(shù)。但是,您的客戶錯誤地(這是我的猜測)從中生成了一個日期。由于在 Java 內(nèi)部,日期存儲為自格林威治標(biāo)準時間 1970 年 1 月 1 日 00:00:00.000 以來的毫秒數(shù)。您的值“1970-01-01 00:05:46”是 5:46(5 分 46 秒),表示與任何特定日期無關(guān)的時間段或持續(xù)時間。但是錯誤地被客戶認為是 ZERRO 時間(1970 年 1 月 1 日 00:00:00.000 GMT)之后的 5:46 的日期。所以(如果我是正確的)你需要修復(fù)客戶端中的錯誤并將你的毫秒數(shù)解釋為持續(xù)時間而不是日期然后修復(fù)由錯誤邏輯產(chǎn)生的舊數(shù)據(jù)庫數(shù)據(jù)



查看完整回答
反對 回復(fù) 2023-05-24
?
catspeake

TA貢獻1111條經(jīng)驗 獲得超0個贊

在你使用的Mysql中

Select SEC_TO_TIME(UNIX_TIMESTAMP('1970-01-01 00:05:46'));

你得到

05:46

所以工作時間是 5 分 46 秒。


查看完整回答
反對 回復(fù) 2023-05-24
?
白豬掌柜的

TA貢獻1893條經(jīng)驗 獲得超10個贊

時刻與時間跨度

這顯然是一個不幸的設(shè)計決定,采用數(shù)據(jù)類型來表示一個時刻,時間軸上的一個特定點,(TIMESTAMP WITH TIME ZONE在標(biāo)準 SQL 中)并濫用它來存儲未附加到時間軸的時間跨度。

從數(shù)據(jù)庫中檢索時刻

鑒于示例文本的格式,我懷疑數(shù)據(jù)實際上可能存儲在日期時間類型的列中。仔細檢查您關(guān)于列的陳述VARCHAR(或者如果它確實是VARCHAR,請一直閱讀到本答案的結(jié)尾)。

在內(nèi)部,該數(shù)據(jù)類型可能存儲自 1970 UTC 第一時刻的紀元參考以來的毫秒數(shù)或微秒數(shù)。所以我們的目標(biāo)是達到這個數(shù)字。

OffsetDateTime使用 JDBC 4.2 或更高版本的驅(qū)動程序?qū)尉刈鳛閷ο髾z索。

OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;

如果您只關(guān)心 while 秒并且不想忽略小數(shù)秒,請調(diào)用toEpochSecond().

long secondsSinceEpoch = odt.toEpochSecond() ;

將該計數(shù)傳遞給Duration班級。此類用于表示未附加到時間軸的時間跨度,時間范圍為小時-分鐘-秒加上小數(shù)秒。

Duration d = Duration.ofSeconds( secondsSinceEpoch ) ;

然后,您可以生成標(biāo)準 ISO 8601 格式的字符串。

String output = d.toString() ;

對于 5 分 46 秒的示例,那將是:

PT5M46S

您可以查詢小時、分鐘和秒部分。

long hours = d.toHoursPart() ;long minutes = d.toMinutesPart() ;

… 等等。

如果您關(guān)心亞秒級的細節(jié),請將您的OffsetDateTime對象轉(zhuǎn)換為更基本的類型Instant。

Instant instant = odt.toInstant() ;

然后以納秒為單位提取整秒和小數(shù)秒。

long seconds = instant.getEpochSecond() ;int nanos = instant.getNano() ;

喂那些給Duration。

Duration d = Duration.ofSeconds( seconds , nanos ) ;

從數(shù)據(jù)庫中檢索文本

如果您確定您的原始值存儲為文本,那么這將是一個更棘手的設(shè)計決策。

通過將中間的 SPACE 用T.

String input = "1970-01-01 00:05:46".replace( " " , "T" ) ;

解析為 aLocalDateTime因為我們?nèi)鄙贂r區(qū)指示符或與 UTC 的偏移量。

LocalDateTime ldt = LocalDateTime.parse( input ) ;

應(yīng)用與 UTC 的偏移量以獲得OffsetDateTime.

OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC ) ;

從那里,繼續(xù)如上所述。


查看完整回答
反對 回復(fù) 2023-05-24
?
倚天杖

TA貢獻1828條經(jīng)驗 獲得超3個贊

如果這代表時間量,我如何將其轉(zhuǎn)換為正常的小時/分鐘/秒單位集?

如果您在 Java 端而不是 MySQL 端執(zhí)行此操作,您有幾個選擇??赡茏詈唵蔚姆椒ㄊ巧晕⒄{(diào)整字符串,使其適合輸入Duration.parse,然后使用實例上的各種訪問器Duration來獲取值。


查看完整回答
反對 回復(fù) 2023-05-24
  • 4 回答
  • 0 關(guān)注
  • 193 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號