[英]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.999Z
和2013-10-21 02:59:59.999
實際上是同一時間: 2013-10-20T23:59:59.999Z
在UTC時區(Z) ,而第二個一個是相對的,並表示為您當地的時區(UTC + 3然后在羅馬尼亞)。
在PostgreSQL中,您應該將時間戳存儲為數據庫中的TIMESTAMP WITH TIME ZONE
( TIMESTAMPTZ
)來處理此問題。 您將始終能夠在您選擇的時區(例如UTC)中將其打印出來。 (您可能對此最近的問題感興趣,以了解存儲類型的重要性。)
如果要再次打印UTC / Z時區的時間戳, new DateTime(millis, DateTimeZone.UTC)
應該有幫助(使用Joda Time)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.