我发现不同的计算机返回的结果与Java中的以下语句不同。
private static final Date ORIGIN = new Date(0L);
在我的电脑中,它会返回以下结果。
Wed Dec 31 16:00:00 PST 1969
但这与它应该的不同。我认为它应该返回以下结果
Thu Jan 1 16:00:00 PST 1970
如何确保不同计算机之间的日期相同?什么是最佳做法?感谢。
答案 0 :(得分:8)
Date
实际上完全相同。不同之处仅在于它的toString()
方法的格式如何 - 这取决于计算机的默认Locale
和时区(而时区数据又取决于Java版本)。
要获得一致的输出,请使用具有固定模式和固定时区的SimpleDateFormat
(在极少数情况下,由于更改了时区数据,它仍然可能会有所不同。)
答案 1 :(得分:0)
如果您想自己设置一个纪元日期而不是直接使用0L,您可能会做类似于下面的事情。 This way it will return different number in different timezones
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
以来经过的毫秒数。”所以当你new Date(0L);
答案 2 :(得分:0)
32/64位也与它无关。