Delphi Julian日期到正常日期

Delphi Julian日期到正常日期,delphi,datetime,julian-date,Delphi,Datetime,Julian Date,我想将Julian日期值转换为普通日期。有人能帮我吗? 我尝试了JulianDateToDateTime(somedouble值),但它引发了异常。 然后我尝试了ModifiedJulianDateToDateTime(一些双倍值),它发布了一个日期,但它完全错了。 例如,我的朱利安值是226。它说它必须显示8月14日。但是我不能用delphi转换它。 谢谢将儒略日期转换为TDateTime值 从文件: 朱利安日期是自公元前4713年1月1日格林威治正午起的天数,包括小数天 以及: 修改后的朱利

我想将Julian日期值转换为普通日期。有人能帮我吗? 我尝试了JulianDateToDateTime(somedouble值),但它引发了异常。 然后我尝试了ModifiedJulianDateToDateTime(一些双倍值),它发布了一个日期,但它完全错了。 例如,我的朱利安值是226。它说它必须显示8月14日。但是我不能用delphi转换它。 谢谢

将儒略日期转换为TDateTime值

从文件:

朱利安日期是自公元前4713年1月1日格林威治正午起的天数,包括小数天

以及:

修改后的朱利安日期是自1858年11月17日格林威治午夜以来的天数,包括小数天。修改后的儒略日期以儒略日期为基础,但调整为使用午夜而不是中午作为起点,并且使用较新的日期作为起点

所以你必须输入一个基于这两个起点的儒略日期


您可以使用反向函数获得正确的朱利安日期:/


在评论中,您的日期似乎是某一年的天数(有时在气象数据记录系统中称为朱利安日)

然后用这个:

myDT := EncodeDate(2014,1,1) + yourJulianDay - 1;  // If the year is 2014 
如果您的“儒略日期”实际上是“儒略日”(即给定年份的天数,也称为序数日期),则可以使用以下函数将其转换为TDate(指定儒略日应视为所在的年份):


JulianDay(2014226)将于8月14日返回此值。

如果您为本年度添加抵销,您可能会更幸运。2014年8月14日的儒略日期大约是2456883-2456884。不幸的是,我不明白你的意思。你能给我举个例子吗?我从一个文本文件中读取了226的朱利安日期字符串。所以我不能使用反向函数。听起来你的“朱利安约会”真的不是。听起来您的值更像是“从1月1日开始的当前年度天数”。这意味着儒略日期(在你的定义中)会有所不同,这取决于你的基准年是否是闰年,即你的“儒略日期”可能是8月13日(闰年)或8月14日(其他年份)。听起来不像是对朱利安日期的固定定义。为了使用您的系统,您需要包括年份,即Julian date 2014#226=8月14日,而Julian date 2012#226是8月13日,您还必须知道年份。我突然想到,您的输入是一年中的某一天(在某些数据记录器中有时称为朱利安日)。那么您的TDateTime是EncodeDate(2014,1,1)+226@DelphiCoding,现在是时候好好看看文档了。我已经在我的程序中添加了这个函数。并发送两个参数;我发送了2014年和2014年的日期(我从文本中读为朱利安日),但结果显示,如前的一些整数:41962@DelphiCoding,使用DecodeDate将其解析为实际日期,或使用DateTimeToString.Yes。这是因为TDate(或TDateTime)是过去某一天起的天数(以及部分天数)的计数器。如果要将其转换为可显示的字符串,请查找FormatDateTime函数。看这里:
uses DateUtils;

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