[英]Converting ZonedDateTime to string
我需要将当前时间作为字符串存储在数据库中。 时间可以在不同的时区,所以我正在研究使用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中的时区之后,这感觉太简单了。
是的,它将准确存储日期,并且使用.parse()方法将允许您使用ZoneDateTime的其他方法。 虽然如果您希望能够对数据库使用排序功能,那么您将需要手动将ZonedDateTime转换为时间戳,或者使用ORM的功能为您完成。
一般来说,我将避免依赖于解析应用程序中任何类的toString()
表示形式。 toString()
旨在提供类的人类可读版本,因此从relase到release都有变化。
我建议您将格式强制为您期望的格式,例如,应用:
String toStoreInDb = DateTimeFormatter.ISO_ZONED_DATE_TIME.format(zonedDateTime);
...
ZonedDateTime fromDb =
ZonedDateTime.parse(stringFromDb, DateTimeFormatter.ISO_ZONED_DATE_TIME);
这样,您的应用程序将抵抗任何toString()
更改。 此外,看看这个错误: ZonedDateTime.parse()中的错误
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.