2013-10-12 77 views
3

在Scala程序,我從客戶端接收特定的日期,例如:Joda DateTime到java.sql.Timestamp忽略時區?

2013-10-20T23:59:59.999Z

,我真的想保持這個日期保存到數據庫時,並沒有轉化爲本地的,所以這條線:

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

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

有什麼辦法可以忽略時區?

回答

2

這是Timestamp.toString()的行爲。 java.sql.Timestamp延伸java.util.Date及其使用的toString()方法,特別是super.getHours(),其中according to javadoc返回在本地時區中解釋的小時數 - 完全如您所見。

但是,內部Timestamp仍然保存正確的時間戳值。但是,將它存儲到數據庫可能存在問題。請參閱this的答案。

2

2013-10-20T23:59:59.999Z2013-10-21 02:59:59.999實際上是相同的時間:2013-10-20T23:59:59.999ZUTC time zone (Z),而第二個是相對的,表示爲本地時區(UTC + 3,那麼在羅馬尼亞)。

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

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