C# 朱利安时间戳到日期时间

C# 朱利安时间戳到日期时间,c#,gregorian-calendar,julian-date,C#,Gregorian Calendar,Julian Date,我正在尝试将朱利安时间戳转换为日期时间。我有以下微秒时间戳212302469304212709。据我所知,我需要把这些毫秒加到儒略历法的开始,公元前4713年1月1日中午12点。所以我有以下方法: private DateTime GetDateTime(string julianTimeStamp) { var julianMilliseconds = Convert.ToDouble(julianTimeStamp)/1000; var beginningOfTimes = n

我正在尝试将朱利安时间戳转换为日期时间。我有以下微秒时间戳212302469304212709。据我所知,我需要把这些毫秒加到儒略历法的开始,公元前4713年1月1日中午12点。所以我有以下方法:

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/07/01 00:08:24.212。根据我的方法,我得到了几乎相同的结果,但天不是1,而是6。对于我测试的不同时间戳,同样的问题。 谁能告诉我我做错了什么?提前谢谢

编辑:
这是我希望收到的确切日期时间:2015年7月1日0小时8分钟24秒212毫秒709微秒日期时间使用公历,所以当你减去年、月等时,你是用公历,而不是儒略历


遗憾的是,DateTime不支持第1年之前的日期。你可以查一下图书馆,也许它对你有帮助。

日期时间使用公历,所以当你减去年、月等时,你是用公历,而不是儒略历


遗憾的是,DateTime不支持第1年之前的日期。您可以签入库,也许它对您有帮助。

给定的时间戳212302469304212709μs转换为天,除以86400000000,得到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日是儒略历的开始日期


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

给定的时间戳212302469304212709μs转换为天,只需除以86400000000,即可得到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日是儒略历的开始日期


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

日历是一团乱麻。尤其是古代的。你所说的儒略历是什么意思,取决于你在世界上的位置。维基百科质疑你的儒略历的“零”日期,等等。你知道今天是儒略历的哪一天吗?真正地哪个国家?哪个版本?我说这些话不是为了困难和无益,而是为了突出问题。你需要确切地知道你的时间戳代表什么,才能希望能够转换它。嗨,Stewart_R,根据我的规格,儒略历开始于公元前4713年1月1日中午12:00。我已经编辑了这个问题,包括了我从上面的例子中期望的确切日期和时间。谢谢你的留言。儒略历从公元前14713年1月1日开始???哪个国家/时区?哪种版本的儒略历法没有一个通用版本?您的时间戳使用的日历如何处理闰年争议:因为您的预期值

大概是公历日,你是如何计算差额的?根据上下文/国家/地区的不同,有许多转换方法:更实际一点:如果您已经知道21202469304212709应等于2015年7月1日,为什么不将其用作零日期?然后为后面加上时间,为前面减去时间?那么只要你远离历史,呆在同一个时区,你应该没事吧?否则,你的问题的上下文会有细微差别,我们不知道。/@Stewart\u R:这个术语通常令人困惑。人们倾向于交替使用朱利安日期和朱利安日数字,而事实上它们可能是非常不同的东西。朱利安式的约会可以是两件事。这可能是一个在16世纪公历改革之前的儒略历上计算的日期。。。或它可以是从公元前4713年1月1日中午开始的连续数日,也称为朱利安日。只有根据上下文才能知道朱利安日期到底是朱利安日历还是朱利安日数。日历真是一团糟。尤其是古代的。你所说的儒略历是什么意思,取决于你在世界上的位置。维基百科质疑你的儒略历的“零”日期,等等。你知道今天是儒略历的哪一天吗?真正地哪个国家?哪个版本?我说这些话不是为了困难和无益,而是为了突出问题。你需要确切地知道你的时间戳代表什么,才能希望能够转换它。嗨,Stewart_R,根据我的规格,儒略历开始于公元前4713年1月1日中午12:00。我已经编辑了这个问题,包括了我从上面的例子中期望的确切日期和时间。谢谢你的留言。儒略历从公元前14713年1月1日开始???哪个国家/时区?哪种版本的儒略历法没有一个通用版本?您的时间戳使用的日历如何处理闰年争议:由于您的预期值可能是公历日期,您如何计算差异?根据上下文/国家/地区的不同,有许多转换方法:更实际一点:如果您已经知道21202469304212709应等于2015年7月1日,为什么不将其用作零日期?然后为后面加上时间,为前面减去时间?那么只要你远离历史,呆在同一个时区,你应该没事吧?否则,你的问题的上下文会有细微差别,我们不知道。/@Stewart\u R:这个术语通常令人困惑。人们倾向于交替使用朱利安日期和朱利安日数字,而事实上它们可能是非常不同的东西。朱利安式的约会可以是两件事。这可能是一个在16世纪公历改革之前的儒略历上计算的日期。。。或它可以是从公元前4713年1月1日中午开始的连续数日,也称为朱利安日。只有根据上下文才能知道朱利安日期到底是朱利安日历还是朱利安日数字。非常感谢杰拉德!我弄错了,根据你的回答,我解决了我的问题。非常有趣。你是如何从公元前4713年1月1日的儒略日期到公元前4714年11月24日的格里高利正午世界时的?此外,当我在这样一个网站上计算朱利安日为0时,结果是4713,而不是4714mkobit使用的Fourmilab,它与德肖维茨和莱因戈尔德一起使用一种奇怪的年份编号惯例。这些人认为,对于公历来说,公元前1年=0,但是对于儒略历来说,公元前1年=1。在我看来,根据儒略历还是格里高利历,用不同的含义来表示否定年似乎很疯狂。从公元前4713年1月1日的儒略历到公元前4714年11月24日的格里高利正午世界时,你是怎么得到的?我在德肖维茨和莱因戈尔德的《2008年历法计算》第15页上查到了。非常感谢杰拉德!我弄错了,根据你的回答,我解决了我的问题。非常有趣。你是如何从公元前4713年1月1日的儒略日期到公元前4714年11月24日的格里高利正午世界时的?此外,当我在这样一个网站上计算朱利安日为0时,结果是4713,而不是4714mkobit使用的Fourmilab,它与德肖维茨和莱因戈尔德一起使用一种奇怪的年份编号惯例。这些人认为,对于公历来说,公元前1年=0,但是对于儒略历来说,公元前1年=1。在我看来,根据儒略历还是格里高利历,用不同的含义来表示否定年似乎很疯狂。从公元前4713年1月1日的儒略历到公元前4714年11月24日的格里高利正午世界时,你是怎么得到的?我在德肖维茨和莱因戈尔德的《2008年历法计算》第15页中找到了它。