2016-04-15 30 views
1

我需要將當前時間作爲字符串存儲在數據庫中。時間可以在不同的時區,所以我正在考慮使用Java SE 8的新ZonedDateTime類。將ZonedDateTime轉換爲字符串

我注意到toString()方法自動輸出:

2016-04-15T17:40:49.305-05:00[America/Chicago] 

這也似乎是由ZonedDateTime.parse可讀的(),並轉換到右側的值。

如果我所做的只是存儲這些值,而且我不需要將該值轉換爲用戶可讀的格式,那麼這是我需要做的以準確地存儲具有適當時區的數據嗎?例如,如果我通過存儲toString()表示將兩個ZonedDateTime插入到SQL數據庫中,並且稍後使用ZonedDateTime.parse()讀取這些時間,我是否可以期望諸如isAfter()和isBefore()精細?

或者我錯過了中間的一步?在試圖找出Java 7中的時區之後,這感覺很容易。

+0

如果你將它們存儲爲字符串,是的。問題在於你在日期內釋放了所有的數據庫功能,並且總是會將其從/轉換爲字符串。 – dambros

回答

1

是的,這將準確地存儲日期,並使用.parse()方法將允許您使用ZoneDateTime的其他方法。雖然如果你想能夠使用你的分類功能,那麼你需要手動將ZonedDateTime轉換爲時間戳,或者使用ORM的功能爲你做。

1

一般來說,我會避免依靠解析我的應用程序中任何類的toString()表示。 toString()是爲了提供一個人類可讀的類的版本,所以它可能會從relase更改爲release。

我建議你給力的格式是一個你期望的那樣,e.g應用:

String toStoreInDb = DateTimeFormatter.ISO_ZONED_DATE_TIME.format(zonedDateTime); 
... 
ZonedDateTime fromDb = 
ZonedDateTime.parse(stringFromDb, DateTimeFormatter.ISO_ZONED_DATE_TIME); 

這樣,你的應用程序將抵制任何toString()變化。 此外看看這個bug: Bug in ZonedDateTime.parse()