朱利安时间戳到日期时间

本文关键字:时间 日期 时间戳 朱利安 | 更新日期: 2023-09-27 18:05:33

我正在尝试将朱利安时间戳转换为日期时间。我有以下微秒时间戳212302469304212709。据我所知,我需要将这些毫秒添加到儒略历的开始(公元前4713年1月1日,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 string作为参数。预期结果应该是2015/07(7月)/01 00:08:24.212。根据我的方法,我得到了几乎相同的结果,但天不是1,它是6。同样的问题,不同的时间戳我测试。谁能告诉我我哪里做错了?提前感谢。

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

朱利安时间戳到日期时间

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

OP计算的一个问题是试图在最早支持的日期之前使用DateTime类,正如另一个海报指出的那样。此外,OP没有说2015年7月1日是在儒略历还是公历中,但MICA计算证明它是在公历中。因为OP使用的是公历,所以儒略历的日期应该在公历预言日历中表示:正午世界时,公元前4714年11月24日。经常引用的日期公元前4713年1月1日是一个预言的儒略历日期。

"预言的"是指从一个现代的日期开始找到一个日期,这个日期的日历日期是绝对确定的,然后将所选日历的规则向后应用,直到达到所选日期,即使所选日期是在所选日历发明之前。

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

遗憾的是,DateTime不支持第1年之前的日期。你可以查看这篇文章中的库,也许它会对你有所帮助。