在Java 8的java.time
包中,有此格式化程序java.time.format.DateTimeFormatter.ISO_INSTANT
(JavaDoc)
允许在解析和格式化时使用可选的小数秒
ISO即时格式化程序,用于以UTC格式格式化或解析即时消息,
例如“ 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;
最佳答案
我能找到的最接近的东西是this answer。但是,我不知道/找不到任何方法来获得0/3/6/9位十进制行为。
我敦促您考虑是否正在解决正确的问题,即:为什么需要序列化格式化程序本身?格式化程序不是数据,而是逻辑。序列化数据,并且在整个项目中使用一致的格式化方案-您甚至可以集中化时间序列化/反序列化,以便读/写的类实际上根本不需要理会格式化。
另一种选择是找到一种方法来序列化格式化程序,并将负担加到每个读取器和写入器上,以记录和解释在序列化时间内使用的格式化程序。您将对所有涉及的类之间共享的格式产生严格的依赖性。