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

时间:2011-01-27 17:18:42

标签: java date

我发现不同的计算机返回的结果与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

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

3 个答案:

答案 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位也与它无关。