2013-10-22 45 views
0

我是個想了解以下段落:轉換MJD最新的Java

START_TIME: 40位字段包含通用時間事件的開始時間,協調(UTC)和儒略日期(MJD)。該字段編碼爲16位,給出MJD的16個LSB,隨後是4位二進制編碼十進制(BCD)中的6位數字的24位編碼。如果開始時間未定義(例如,對於NVOD參考服務中的事件),則該字段的所有位都設置爲「1」。

實施例1:93/10/13 12:45:00被編碼爲「0xC079124500」。

我想在沒有使用第三方庫的情況下將Java中的40位轉換爲日期和時間。

請幫我解決這個問題。

回答

0

好吧,我得到它的工作。

從40位開始,16msb位表示MJD。剩餘24位表示編碼爲HHMMSS的BCD中的時間。

例如0xC079問題代表MJD,即49273十進制。

要MJD轉換成日期,在十進制(以上轉化爲49273)轉換MJD,則:

爲了找到Y,M,d從MJD:

Y' = int [(MJD - 15078.2)/365.25] 
M' = int { [MJD - 14956.1 - int (Y' * 365.25) ]/30.6001 } 
D = MJD - 14956 - int (Y' * 365.25) - int (M' * 30.6001) 

If M' = 14 or M' = 15, then K = 1; else K = 0 

Y = Y' + K 

M = M' - 1 - K * 12 

MJD修改的Julian日期

Y從1900年起(例如2003年,Y = 103)

從1月10日

M月(= 1)至十二月(= 12)

D 1個月的天至第31

KM'Y'中間變量

*乘法

int整數部分,忽略餘數

+0

值在哪裏es'15078.2','14956.1'和'30.6001'從哪裏來?看到你正在放棄剩下的東西,你測試了多久以確保某些日期實際上不會低於或高於預期?而當你申請'int'時,你會忽略餘數,因爲一些'int'強制轉換會執行不需要的舍入? – Shiri