2014-11-24 71 views
-1

我想將朱利安日期值轉換爲正常日期。誰能幫幫我嗎? 我試過JulianDateToDateTime(somedouble value),但它引發異常。 然後我試着ModifiedJulianDateToDateTime(一些雙值)它發佈了一個日期,但它的總體錯誤。 例如我的朱利安價值是226.它說它必須顯示8月14日。但我無法將其轉換爲德爾福。 謝謝德爾福朱利安日期至正常日期

+0

你可能有更多的運氣當你添加當年的抵消額。 2014年8月14日的Julian日期約爲2456883 - 2456884. – 2014-11-24 13:10:47

回答

0

如果你的「儒略曆」真的是「儒略日」(即天數到某一年,又名順序日期),那麼你可以使用下面的功能將其轉換爲一個TDate(你指定年份的儒略日應該被認爲是):

uses DateUtils; 

FUNCTION JulianDay(Year,Day : Cardinal) : TDate; 
    BEGIN 
    Result:=IncDay(EncodeDate(Year,1,1),PRED(Day)) 
    END; 

這將返回8月14日的儒略日(2014,226)

+0

我已將此功能添加到我的程序中。併發送兩個參數;我發送2014年和日期(我從文本中讀取爲朱連天),但結果顯示爲一些整數,例如:41962 – DelphiCoding 2014-11-24 14:24:10

+0

@DelphiCoding,使用DecodeDate將其解析爲實際日期或DateTimeToString。 – 2014-11-24 14:26:28

+0

是的。這是因爲TDate(或TDateTime)是自過去某天以來的幾天(以及分數天)的計數器。如果您想將其轉換爲可顯示的字符串,請查看FormatDateTime函數。看看這裏:http://www.delphibasics.co.uk/RTL.asp?Name=FormatDateTime – HeartWare 2014-11-24 14:27:07

4

System.DateUtils.JulianDateToDateTime將朱利安日期轉換爲TDateTime值。

從技術文檔:

Julian日期的天數,包括分數天,自4713 BC 1月1日,格林威治中午。

併爲System.DateUtils.ModifiedJulianDateToDateTime

修改後的儒略日期是天數,包括分數天,自11月17日,格林威治午夜1858年修正的儒略日期基於儒略曆日期,但調整以午夜而不是中午作爲起點,他們使用更近的日期作爲起點。

因此,您必須根據這些起點之一輸入Julian日期。


可以使用逆函數來獲取正確的儒略日:DateTimeToJulianDate/DateTimeToModifiedJulianDate


在評論似乎有您的日期是某一年(有時被稱爲儒略日氣象數據記錄系統)的日數。

然後用這個:

myDT := EncodeDate(2014,1,1) + yourJulianDay - 1; // If the year is 2014 
+0

不幸的是,我不明白你。你可以給我一個例子嗎? – DelphiCoding 2014-11-24 13:48:20

+0

我從文本文件中讀取Julian日期字符串,它是226。所以我不能使用反向函數.. – DelphiCoding 2014-11-24 14:02:34

+0

聽起來像你的「朱利安日期」真的不是一個。這聽起來更像是你的價值是「從今年1月1日開始進入當年的天數」。這意味着Julian日期(在您的定義中)會有所不同,具體取決於您的基準年是否爲閏年,即。你的「儒略日期」可以是8月13日(閏年)或8月14日(其他年份)。這聽起來不像朱利安日期的一個非常固定的定義。爲了使用你的系統,你需要包含年份,即。 Julian date 2014#226 = Aug 14,Julian date 2012#226 is Aug 13. – HeartWare 2014-11-24 14:10:03