簡體   English   中英

Joda DateTime到java.sql.Timestamp忽略時區?

[英]Joda DateTime to java.sql.Timestamp ignore timezone?

在scala程序中,我從客戶端收到一個特定的日期,例如:

2013-10-20T23:59:59.999Z

我真的想保存這個日期保存到數據庫而不是轉換為本地,所以這一行:

debug("--sql timestamp: " + new Timestamp(reading.timestamp.getMillis()))

打印出來: 2013-10-21 02:59:59.999 (我在羅馬尼亞)。

有什么方法可以忽略時區嗎?

這是Timestamp.toString()行為。 java.sql.Timestamp擴展了java.util.Date並在其使用的toString()方法中,特別是super.getHours()根據javadoc ,它返回在本地時區解釋的小時數 - 正如您所觀察到的那樣。

但是,內部Timestamp仍保留正確的時間戳值。 但是,將其存儲到數據庫可能存在問題。 看到這個答案。

2013-10-20T23:59:59.999Z2013-10-21 02:59:59.999實際上是同一時間: 2013-10-20T23:59:59.999ZUTC時區(Z) ,而第二個一個是相對的,並表示為您當地的時區(UTC + 3然后在羅馬尼亞)。

在PostgreSQL中,您應該將時間戳存儲為數據庫中的TIMESTAMP WITH TIME ZONETIMESTAMPTZ )來處理此問題。 您將始終能夠在您選擇的時區(例如UTC)中將其打印出來。 (您可能對此最近的問題感興趣,以了解存儲類型的重要性。)

如果要再次打印UTC / Z時區的時間戳, new DateTime(millis, DateTimeZone.UTC)應該有幫助(使用Joda Time)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM