【问题标题】:java parse date with picosecondjava用皮秒解析日期
【发布时间】:2019-02-04 13:22:05
【问题描述】:

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

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

它会抛出一个异常,表示我无法在句点之后创建超过 9 位的格式。

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

任何解决方案都会对我有所帮助,但更喜欢与 LocalDateTime 一起使用的类/方式

【问题讨论】:

  • 大多数系统不能表示小于一纳秒的时间。我怀疑 Java 的日期时间系统是否支持小于纳秒的任何内容。
  • @vandench 这是因为光纳秒(光在一纳秒内传播的距离)大约是普通笔记本电脑宽度的一半。较小的时间单位与计算机或其用户相关的可能性很小。
  • @vandench 我如何断言 java 支持它?
  • @mypetlion 好的...不确定这与光有什么关系,但没关系。这也绝对不是计算机不支持小于一纳秒的时间的原因,它们不支持那么小的时间,因为它们的处理器无法以适用的速度运行。
  • @vandench 我只是在解释你所说的事情背后的原因。不可能在不到一纳秒的时间内将信号从一个硬件传输到另一个硬件,甚至从一个硬件的一个部分到另一个硬件。 CPU 速度最终受到光速的限制,就像我们宇宙中的一切一样。在真空中,光将在皮秒内传播 0.3 毫米。 CPU不是真空的,大于0.3mm。这意味着这么小的时间测量可能永远不会相关。

标签: java date-parsing time-format localdate datetimeformatinfo


【解决方案1】:

无解

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

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

截断

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

滚动你自己的课程

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多