Julian 时间戳到日期时间

Julian Time stamp to Date Time

我正在尝试将 Julian 时间戳转换为日期时间。我有以下微秒时间戳 212302469304212709。据我所知,我需要将这些毫秒添加到儒略历的开头(4713 年 1 月 1 日 B.C., 12:00(中午))。所以我有以下方法:

private DateTime GetDateTime(string julianTimeStamp)
{
   var julianMilliseconds = Convert.ToDouble(julianTimeStamp)/1000;

   var beginningOfTimes = new DateTime(1, 1, 1, 0, 0, 0, 0);

   var dateTime = beginningOfTimes.AddMilliseconds(julianMilliseconds).AddYears(-4713).AddMonths(-1).AddDays(-1).AddHours(-12);

   return dateTime;
}

假设我传递 212302469304212709 字符串作为参数。预期结果应该是2015/07(July)/01 00:08:24.212。根据我的方法,我得到了几乎相同的结果,但是天不是 1,而是 6。我测试的不同时间戳也有同样的问题。 谁能告诉我我做错了什么?提前致谢。

已编辑: 这是我希望收到的确切日期时间:2015(年)7(月)1(天)0(小时)8(分钟)24(秒)212(毫秒)709(微秒)

DateTime 使用公历,因此当您减去年、月等时,您使用的是公历,而不是儒略历。

不幸的是,DateTime 不支持 1 年之前的日期。您可以查看 this post 中的库,也许它对您有帮助。

给定的时间戳 212,302,469,304,212,709 μs 转换为天数(仅除以 86,400,000,000)得到 2457204.505836 天(精确到小数点后六位,这是我能做到的最好结果,没有很多额外的麻烦)。使用美国海军天文台编写的多年计算机交互式年历(MICA),并输入自由格式日期 2015(年)7(月)1(日)0(小时)8(分钟)24(秒)212 (millisecond) 709(microsecond),程序计算完全相同的天数(精确到小数点后六位),证明时间戳是一个准确的儒略日期。

OP 计算的一个问题是尝试在支持的最早日期之前使用 DateTime class,正如另一位海报所指出的那样。此外,OP 没有说明 2015 年 7 月 1 日是儒略历还是公历,但 MICA 计算证明它是公历。由于 OP 在公历中工作,儒略历的纪元应在公历中注明:世界时间中午,公元前 4714 年 11 月 24 日。经常被引用的日期 4713 年 1 月 1 日是一个预想的儒略历日期。

"Proleptic" 表示通过从现代日期开始找到日期,谁的日历日期是绝对确定的,并向后应用所选日历的规则直到达到所需日期,即使所需日期在所选日历发明之前。