【发布时间】:2021-04-13 05:56:14
【问题描述】:
我有一个 Spring Boot 服务器,它返回如下日期:
{
// Some keys
pickupDate: {
epochSecond: 1612199331,
nano: 428000000
},
// Some other keys
}
如何将该对象转换为 JavaScript 日期?
【问题讨论】:
标签: javascript java spring-boot
我有一个 Spring Boot 服务器,它返回如下日期:
{
// Some keys
pickupDate: {
epochSecond: 1612199331,
nano: 428000000
},
// Some other keys
}
如何将该对象转换为 JavaScript 日期?
【问题讨论】:
标签: javascript java spring-boot
new Date( ( 1_612_199_331 * 1_000 ) + ( 428_000_000 / 1_000_000 ) )
如果这些值来自 Java 8 及更高版本的 java.time 类中的对象,例如 Instant,则:
epochSecond 表示自 1970 年第一刻的 epoch reference 以来的整秒计数,如 UTC,1970-01-01T00:00Z。nano 将小数秒表示为 nanoseconds 的计数,十亿分之一秒。虽然我不懂 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。发音为“祖鲁语”。
【讨论】: