我有一个整数,表示自 1904 年 1 月 1 日凌晨 12:00 以来经过的毫秒数。我相信这也称为 Macintosh 时间。它是原始 Mac OS 使用的基本时间。
通常我会这样做:
int millis = 1284543608;
Date date = new Date(millis);
System.out.println(date);
但是,这使用 Unix 纪元,因此不会返回准确的日期。
您将如何使用从 Macintosh 时间获得的毫秒数打印日期?
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()
所以我们知道两者的时代,我们需要计算两者之间的差异......
我们可以从标准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;
例如...