2014-11-24 140 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