Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何基于Macintosh时间以毫秒为单位打印日期_Java_Date_Datetime - Fatal编程技术网

Java 如何基于Macintosh时间以毫秒为单位打印日期

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

我有一个整数,表示从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.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