繁体   English   中英

将ZonedDateTime转换为字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM