2

我有一个带有皮秒的字符串日期(句点后的 9 到 12 位数字之间),当我尝试使用以下内容解析日期时DateTimeFormatter

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSSSSSSS");

它抛出一个异常,说我不能在句点之后创建一个超过 9 位的格式。

是否有另一个可以解析日期的类,或者另一种解析方式。

任何解决方案都会帮助我,但更喜欢使用的类/方式LocalDateTime

4

1 回答 1

3

没有解决方案

我听说没有代表皮秒时间分辨率的类、库或数据库。

正如对问题所评论的那样,正如Grace Hopper 博士所教授的那样,在一纳秒内仅传播大约一英尺。光在皮秒内仅传播几分之一毫米。这比计算机技术移动电信号所花费的距离要小。因此,如此精细的时间测量在我们的一生中不太可能实用或相关。

截短

如果您的应用程序真的不需要 picos,我建议截断您的字符串,删除小数秒前 9 位之后的所有数字。然后解析为InstantorLocalDateTime等​​。

滚动你自己的课程

如果您必须表示皮秒,我建议根据小数分隔符将输入字符串一分为二(根据 ISO 8601 标准,它可以是逗号或句点 FULL STOP,首选逗号)。

  • 将第一部分解析为自 1970-01-01T00:00:00Z 等纪元以来的整秒数LocalDateTimeInstant
  • 然后将第二部分解析为 64 位长整数。

PicoMoment你可以用一个方法编写一个类似 的小类parse,在内部表示这两个部分。查看 OpenJDK 源代码以查看java.time类内部的类似表示。

如果你走这条路,我建议你遵循java.time API 作为模型。

于 2018-08-29T20:50:56.487 回答