首页 > 解决方案 > java.time.format.DateTimeFormatter.ISO_INSTANT 的格式字符串?

问题描述

在 Java 8 的java.time包中,有这个格式化程序

java.time.format.DateTimeFormatter.ISO_INSTANT( JavaDoc )

它允许在解析和格式化时使用可选的小数秒

以 UTC 格式格式化或解析瞬间的 ISO 瞬间格式化程序,例如“2011-12-03T10:15:30Z”。

这将返回一个能够格式化和解析 ISO-8601 即时格式的不可变格式化程序。格式化时,总是输出秒数。纳秒根据需要输出零、三、六或九位数字。解析时,至少需要秒字段的时间。解析从零到九的小数秒。不使用本地化的十进制样式。

可用于创建此格式化程序的格式字符串是什么?我需要存储String但不是DateTimeFormatter因为后者不可序列化。

具体来说,我想知道如何表达小数秒(包括.数字前面的)。我知道S是几分之一秒,X是区域偏移,但我不知道如何把它们放在一起

S       fraction-of-second          fraction          978
X       zone-offset 'Z' for zero    offset-X          Z; -08; -0830; -08:30; -083015; -08:30:15;

标签: javajava-8java-timedatetimeformatter

解决方案


我能找到的最接近的是这个答案。但是,我不知道/找不到任何方法来获得 0/3/6/9 位十进制行为。

我敦促您考虑是否解决了正确的问题,即:为什么需要序列化格式化程序本身?格式化程序不是数据,而是逻辑。序列化你的数据,并在整个项目中使用一致的格式化方案——你甚至可以集中时间序列化/反序列化,这样读/写的类实际上根本不需要格式化。

另一种方法是找到一种方法来序列化格式化程序,并让每个读者和作者承担记录和解释用于序列化时间的格式化程序的负担。您将自己置于对所有涉及的类之间共享的格式的硬依赖中。


推荐阅读