【问题标题】:java.time.Instant response to JavaScript datejava.time.对 JavaScript 日期的即时响应
【发布时间】:2021-04-13 05:56:14
【问题描述】:

我有一个 Spring Boot 服务器,它返回如下日期:

{
  // Some keys
  pickupDate: {
    epochSecond: 1612199331,
    nano: 428000000
  },
  // Some other keys
}

如何将该对象转换为 JavaScript 日期?

【问题讨论】:

    标签: javascript java spring-boot


    【解决方案1】:

    tl;博士

    new Date( ( 1_612_199_331 * 1_000 ) + ( 428_000_000 / 1_000_000 ) ) 
    

    Java

    如果这些值来自 Java 8 及更高版本的 java.time 类中的对象,例如 Instant,则:

    • epochSecond 表示自 1970 年第一刻的 epoch reference 以来的整秒计数,如 UTC,1970-01-01T00:00Z。
    • nano 将小数秒表示为 nanoseconds 的计数,十亿分之一秒。

    JavaScript

    虽然我不懂 JavaScript,但似乎大多数实现都提供了 Date 类型。 Date 表示基于与 java.time 相同的纪元引用的计数在 UTC 中看到的时刻。

    区别在于小数秒的粒度。 JavaScript Date 使用毫秒而不是 java.time 中的纳秒。因此,您需要将该纳米数除以 1,000,000 才能得到毫秒。

    将整秒乘以一千得到毫秒。并将 nanos 的计数除以一百万以获得毫秒。求和以获得自纪元参考以来的总毫秒数。传递给constructor of Date

    const d = 
            new Date( 
              ( 1_612_199_331 * 1_000 ) 
              + 
              ( 428_000_000 / 1_000_000 ) 
            )
    ;
    

    使用标准ISO 8601 格式生成表示存储在该Date 中的时刻的文本。

    const d = new Date( ( 1_612_199_331 * 1_000 ) + ( 428_000_000 / 1_000_000 ) ) ;
    console.log( d.toISOString() ) ;
    

    2021-02-01T17:08:51.428Z

    末尾的 Z 表示距 UTC 零时分秒的 offset。发音为“祖鲁语”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-26
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 2022-11-14
      • 1970-01-01
      相关资源
      最近更新 更多