2013-10-01 62 views
0

我有一個整數,表示從上午12:00開始經過的毫秒數。在1904年1月1日。我相信這也被稱爲Macintosh時間。這是原始Mac OS使用的基準時間。如何打印基於Macintosh時間的毫秒數日期

通常情況下,我會做:

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

然而,這種使用Unix的時代,並因此將不會返回準確的日期。

如何使用從Macintosh時間獲得的毫秒數來打印日期?

回答

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

+0

就像一個提示,我明白這個方法有一個錯誤,它不會將毫秒歸零,所以你的計算將會「略微」關閉...... – MadProgrammer

+0

有趣的是,我想我已經修復它首先設置的時間到Unix時代(儘管1000的任何倍數應該做的) – Ron

+0

我會給那個+1 ...你可能想糾正喲你的方法現在給'-2082880800000L';) – MadProgrammer

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; 

比如...

+0

設置HOUR_OF_DAY字段爲12是12PM,不是12AM – Ron

+0

@RonE是的,只是檢查:P – MadProgrammer