我需要将当前时间作为字符串存储在数据库中。时间可以位于不同的时区,因此我正在考虑使用 Java SE 8 的新 ZonedDateTime 类。
我注意到 toString() 方法自动输出:
2016-04-15T17:40:49.305-05:00[America/Chicago]
这似乎也可以被 ZonedDateTime.parse() 读取并转换为正确的值。
如果我所做的只是存储这些值,并且不需要将值转换为用户可读的格式,那么我需要做的就是使用正确的时区准确存储数据吗?例如,如果我通过存储它们的 toString() 表示形式将两个 ZonedDateTimes 插入到 SQL 数据库中,然后我使用 ZonedDateTime.parse() 读取这些时间,我可以期望 isAfter() 和 isBefore() 之类的东西正常工作吗好吗?
或者我错过了中间的一步?在尝试找出 Java 7 中的时区之后,这感觉太简单了。
最佳答案
一般来说,我会避免依赖于解析应用程序中任何类的 toString()
表示形式。
toString()
旨在提供类的人类可读版本,因此它可能会在版本之间发生更改。
我建议您强制采用您期望的格式,例如应用:
String toStoreInDb = DateTimeFormatter.ISO_ZONED_DATE_TIME.format(zonedDateTime);
...
ZonedDateTime fromDb =
ZonedDateTime.parse(stringFromDb, DateTimeFormatter.ISO_ZONED_DATE_TIME);
这样您的应用程序将抵制任何 toString()
更改。
另外看看这个错误:
Bug in ZonedDateTime.parse()
关于java - 将 ZonedDateTime 转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36658034/