1

我正在尝试将 DateTime 转换为 Julian 日期并在 Windows 7 下反转它。

    public static double ToJulianDate(this DateTime dt) {
        return dt.ToOADate() + 2415018.5;
    }
    public static DateTime Julian2DT(this double julian) {
        return DateTime.FromOADate(julian - 2415018.5);
    }

当我测试这两个功能时,如下所示

var dt = DateTime.Now;
dt.ToString("yyyy-MM-dd HH:mm:ss.ffffff").Dump();
dt.ToJulianDate().Julian2DT().ToString("yyyy-MM-dd HH:mm:ss.ffffff").Dump();

反转的儒略日期总是与原始 DateTime 值略有不同,相差数百微秒。

是我写了错误的代码还是 Windows 时间系统中存在一些微秒的误差?

4

1 回答 1

1

这是儒略日期表示为 的事实的自然结果double,其准确性总是有限的。例如,当前值约为 2456348.78370906。这在小数点前给出了 7 个有效数字 - 而 adouble仅精确到“大约”15 个小数位。所以我们在小数部分内有大约 8 位小数的精度......这意味着代表一天。

现在 1 天 / 100000000 = 0.000864 秒。所以我只希望准确度不到一毫秒。

如果您为 Julian 日期添加常数,事情看起来会更加乐观 - 此时当前值仅为 41330 左右,因此在一天中的时间方面的精度值中有更多“空间”。基本上,浮点值越大,绝对精度越差。(相邻值之间的差距变大。)

于 2013-02-25T06:51:27.307 回答