Java 如何基于Macintosh时间以毫秒为单位打印日期
我有一个整数,表示从1904年1月1日上午12:00开始经过的毫秒数。我相信这也被称为麦金塔时代。它是原始Mac OS使用的基准时间 通常我会:Java 如何基于Macintosh时间以毫秒为单位打印日期,java,date,datetime,Java,Date,Datetime,我有一个整数,表示从1904年1月1日上午12:00开始经过的毫秒数。我相信这也被称为麦金塔时代。它是原始Mac OS使用的基准时间 通常我会: int millis = 1284543608; Date date = new Date(millis); System.out.println(date); 但是,它使用Unix纪元,因此不会返回准确的日期 如何使用从Macintosh time获得的毫秒打印日期 Calendar macEpoch = Calendar.getInsta
int millis = 1284543608;
Date date = new Date(millis);
System.out.println(date);
但是,它使用Unix纪元,因此不会返回准确的日期
如何使用从Macintosh time获得的毫秒打印日期
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()));
请注意,当您将
-208288080000L
添加到macTime.getTimeInMillis()
时,会发生整个转换,因此我们知道两者的历元,我们需要计算两者之间的差异
我们可以从标准的日历开始
以毫秒为单位获取时间
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);
返回-208288080000
。所以在Mac时间和Java时间之间,有一个208288080000
毫秒的差异……我可能会把它存储在某个地方
任何时候你需要从Mac时间转换到Java时间,你都需要从Mac时间中减去这个值,使它与Java时间一致
long javaTime = macTime - 2082880800000L;
例如…作为一个提示,我知道这个方法有一个错误,它没有将毫秒归零,因此您的计算将“稍微”偏离…您提出的问题很有趣,我想我已经通过首先将时间设置为Unix纪元(尽管1000的任何倍数都可以)我会给a+1…您可能想更正差值,但您的方法现在给出
-208288080000L
;)愚蠢的我,我应该注意到,因为它不是1000的倍数。这里有一个错误,你说的是将HOUR_OF_DAY字段设置为12是下午12点,而不是12点12AM@RonE是的,我只是检查一下:P