java - 将 ZonedDateTime 转换为字符串

标签 java datetime zoneddatetime

我需要将当前时间作为字符串存储在数据库中。时间可以位于不同的时区,因此我正在考虑使用 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/

相关文章:

java - 如何更改首选项 fragment 中首选项的文本颜色?

c# - 获取下一个发生夏令时转换的日期/时间

java - 将 unix 时间转换为工作日

python - 在文件中搜索小时数的最佳方法

datetime - ZonedDateTime 中的 XMLGregorianCalendar 格式日期

Java新手试图找出NullPointerException和

java - 如何在 Java 中制作 "Pixelated"行

java - 如何调整单个 JTable 列的大小而不影响其他表列

java - LocalTime() 两次之间的差异

java - 将字符串转换为 java.time.ZonedDateTime