Java 如何保持不同计算机之间返回相同结果的日期(0L)

Java 如何保持不同计算机之间返回相同结果的日期(0L),java,date,Java,Date,我发现不同的计算机返回的结果与下面的Java语句不同 私有静态最终日期来源=新日期(0L) 在我的计算机中,它返回以下结果 1969年12月31日星期三太平洋标准时间16:00:00 但这和它应该做的不同。我认为它应该返回以下结果 1970年1月1日星期四16:00:00太平洋标准时间 如何确保不同计算机之间的日期相同?最佳做法是什么?谢谢。日期实际上完全一样。区别仅在于它的toString()方法的格式化方式——这取决于默认的Locale和计算机的时区(而时区数据又取决于Java版本) 要获得

我发现不同的计算机返回的结果与下面的Java语句不同

私有静态最终日期来源=新日期(0L)

在我的计算机中,它返回以下结果

1969年12月31日星期三太平洋标准时间16:00:00

但这和它应该做的不同。我认为它应该返回以下结果

1970年1月1日星期四16:00:00太平洋标准时间


如何确保不同计算机之间的日期相同?最佳做法是什么?谢谢。

日期实际上完全一样。区别仅在于它的
toString()
方法的格式化方式——这取决于默认的
Locale
和计算机的时区(而时区数据又取决于Java版本)


要获得一致的输出,请使用具有固定模式和固定时区的a(在某些罕见的情况下,由于时区数据的更改,它仍然会有所不同)。

如果您希望自己设置纪元日期,而不是直接使用0L,您可以执行以下类似操作
这样,它将在不同的时区返回不同的数字

    Calendar epoch = Calendar.getInstance();
    epoch.set(Calendar.YEAR, 1900);
    epoch.set(Calendar.MONTH, Calendar.JANUARY);
    epoch.set(Calendar.DAY_OF_MONTH, 0);
    epoch.set(Calendar.HOUR_OF_DAY, 0);
    epoch.set(Calendar.MINUTE, 0);
    epoch.set(Calendar.SECOND,0);
    epoch.set(Calendar.MILLISECOND, 0);

    Date d = epoch.getTime();

然而,日期的javadoc表示;“毫秒值表示自1970年1月1日00:00:00.000
GMT
”因此,在执行新日期(0L)时,它将执行相同的操作

和32/64位也与此无关。

啊哈。。我忘了地点。。谢谢你的SimpleDataFormat,我会查出来的。谢谢Michael。我使用区域设置来解决我的问题,谢谢你的回答;你的错误是考虑格式化日期,实际上是一个日期。您看到的是某些规则下的日期表示(特别是时区)@bestsss是的,它是相同的。该值为0。不同的只是显示格式。但是,当我想在两台计算机上显示完全相同的地理位置时,这有点烦人。注释是错误的,它根据时区设置日期,这会有所不同。日期(0)恰到好处。它说的是1970年1月1日格林威治标准时间,所以它指定了它作为参考的时区。哪一部分是错误的?我参考了代码,没有指定时区[Calendar.getInstance()],因此结果会因时区而异。