2 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊
關(guān)于Date
對(duì)象的真正含義存在誤解。自'01-01-1970 00:00:00 UTC'
. 換句話說(shuō),它始終是 UTC 日期/時(shí)間,當(dāng)您嘗試打印它時(shí),默認(rèn)格式化程序會(huì)在您的本地時(shí)區(qū)中隱式轉(zhuǎn)換它。
如果您想同時(shí)存儲(chǔ)瞬間(即 UTC 日期/時(shí)間)和時(shí)區(qū),則必須使用Calendar
對(duì)象。但無(wú)論如何,如果你想在 Oracle 中存儲(chǔ)時(shí)間和區(qū)域,你應(yīng)該直接存儲(chǔ)一個(gè)字符串,或者一個(gè)日期和一個(gè)字符串(對(duì)于時(shí)區(qū)),因?yàn)?AFAIK,Oracle DATE 字段沒(méi)有時(shí)區(qū)的概念。

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊
java.time
您正在使用幾年前被JSR 310 中定義的java.time類(lèi)取代的糟糕的日期時(shí)間類(lèi)。
“CST”和這樣的 2-4 個(gè)字符的偽區(qū)域不是時(shí)區(qū)。它們不是標(biāo)準(zhǔn)化的,甚至不是唯一的!例如:CST
是北美中部時(shí)間,也是中國(guó)標(biāo)準(zhǔn)時(shí)間。
真正的時(shí)區(qū)采用格式Continent/Region
。例如:Europe/Paris
或Africa/Tunis
。請(qǐng)參閱維基百科中的列表。
要在時(shí)區(qū)的上下文中表示日期和時(shí)間,請(qǐng)使用ZonedDateTime
class。
LocalDateTime
要存儲(chǔ)與區(qū)域、使用和ZoneId
類(lèi)分開(kāi)的日期時(shí)間。
數(shù)據(jù)庫(kù)
您的評(píng)論表明希望將當(dāng)前時(shí)刻存儲(chǔ)在數(shù)據(jù)庫(kù)中。
以 UTC 捕獲當(dāng)前時(shí)刻。
Instant instant = Instant.now() ;
要與 JDBC 4.2 一起使用,請(qǐng)轉(zhuǎn)換為OffsetDateTime
.
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ;
傳遞給準(zhǔn)備好的語(yǔ)句。
myPreparedStatement.setObject( … , odt ) ;
取回。
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
添加回答
舉報(bào)