我有一个整数,表示自上午12点以来经过的毫秒数。在1904年1月1日。我相信这也被称为Macintosh时间。它是原始Mac OS使用的基准时间。
通常我会这样做:
int millis = 1284543608;
Date date = new Date(millis);
System.out.println(date);
然而,这使用了Unix时代,因此不会返回准确的日期。
如何使用从Macintosh时间获得的毫秒数打印日期?
答案 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;
例如......