0

我有一个整数,表示自 1904 年 1 月 1 日凌晨 12:00 以来经过的毫秒数。我相信这也称为 Macintosh 时间。它是原始 Mac OS 使用的基本时间。

通常我会这样做:

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

但是,这使用 Unix 纪元,因此不会返回准确的日期。

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

4

2 回答 2

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()));

请注意,当您添加-2082880800000LmacTime.getTimeInMillis()

于 2013-10-01T10:06:14.607 回答
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;

例如...

于 2013-10-01T10:07:14.940 回答