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

java.time.format.DateTimeFormatter.ISO_INSTANTJavaDoc

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


  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位十进制行为。

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

另一种选择是找到一种方法来序列化格式化程序,并将负担加到每个读取器和写入器上,以记录和解释在序列化时间内使用的格式化程序。您将对所有涉及的类之间共享的格式产生严格的依赖性。

09-10 10:08
查看更多