【发布时间】:2021-05-20 13:42:11
【问题描述】:
我有这个以毫秒为单位的 unix 时间戳: -62135769600000
我尝试使用 java 和 javascript 转换时间戳,但我得到了两个不同的响应。往下看:
Date d = new Date(-62135769600000L);
System.out.println(d); // output = Sat Jan 01 00:00:00 GMT 1
d = new Date(-62135769600000L)
console.log(d) // output = Fri Dec 29 0000 19:00:00 GMT-0500 (EST)
如您所见,我们有两个不同的结果。我想了解原因以及如果可能的话如何解决。
【问题讨论】:
-
您是否尝试过具有更合理时间戳的代码,例如现在的时间戳,而不是一些奇怪的负值!?
-
Java Date 和 LocalDate 没有时区的概念。您应该考虑迁移到 java LocalDateTime
-
我建议在 Java 中不要使用
java.util.Date。该课程设计不良且早已过时。而是使用来自java.time, the modern Java date and time API 的Instant。 -
这可能是Julian 和proleptic Gregorian 日历之间的区别。
java.util.Date使用 Julian,我不懂 JavaScript。 -
@OleV.V.是的;每当你用它做愚蠢的事情时, juDate 都会“规范化”为日历(例如,将 epochmillis 转换为人类概念,toString 本身也是如此),并且如果时间戳在硬编码截止之前,规范化代码将使用 julian,这OP 的近 0 年时间戳肯定是。看我的回答。
标签: javascript java unix-timestamp