如何根据Macintosh时间从毫秒打印日期

时间:2013-10-01 09:53:34

标签: java date datetime

我有一个整数,表示自上午12点以来经过的毫秒数。在1904年1月1日。我相信这也被称为Macintosh时间。它是原始Mac OS使用的基准时间。

通常我会这样做:

int millis = 1284543608;
Date date = new Date(millis);
System.out.println(date);

然而,这使用了Unix时代,因此不会返回准确的日期。

如何使用从Macintosh时间获得的毫秒数打印日期?

2 个答案:

答案 0 :(得分:1)

    Calendar macEpoch = Calendar.getInstance();
    macEpoch.setTimeInMillis(0);
    macEpoch.set(1904,0, 1, 0, 0, 0);

    //On a mac
    Calendar macTimeForToday = Calendar.getInstance();

    System.out.println("ms since mac epoch: " + macTimeForToday.getTimeInMillis());
    System.out.println("ms since epoch: " + (macTimeForToday.getTimeInMillis() + macEpoch.getTimeInMillis()));

请注意,将-2082880800000L添加到macTime.getTimeInMillis()

时会发生整个翻译

答案 1 :(得分:0)

所以我们知道两者的时代,我们需要计算两者之间的差异......

我们可以从标准Calendar开始,以毫秒为单位获取时间

Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 1904);
cal.set(Calendar.DATE, 1);
cal.set(Calendar.MONTH, Calendar.JANUARY);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);

返回-2082880800000。因此,在Mac时间和Java时间之间,存在2082880800000毫秒的差异....我可能会将其存储在某处。

任何时候你需要从Mac时间转换为Java时间,你需要从Mac时间中减去这个值,使它与Java时间一致......

long javaTime = macTime - 2082880800000L;

例如......