c# - Julian 时间戳到日期时间

标签 c# gregorian-calendar julian-date

我正在尝试将 Julian 时间戳转换为日期时间。我有以下微秒时间戳 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 字符串作为参数传递。预期结果应该是2015/07(July)/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 (millisecond) 709(microsecond),程序计算出完全相同的天数(精确到小数点后六位),证明时间戳是一个准确的儒略日期。

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

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

关于c# - Julian 时间戳到日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31734073/

相关文章:

c# - 向表中插入数据时如何获取表生成的Id?

c# - 使用 Expression 类构造 LINQ 表达式时按正则表达式搜索

java - 将字符串格式的日期解析为公历,包含小时和分钟

java - GregorianCalendar 意外值

R - 使用 ggplot2 在 x 轴上绘制儒略日

c# - 禁用表单的透明度

c# - 通过 C# 递归通知子控件

python - 将 python datetime 对象格式化为参数

java - 日历实例不工作

java - 在 Java 中将常规日期转换为儒略日期,反之亦然