windows微秒计算精度

时间:2013-02-25 06:46:25

标签: .net windows datetime

我正在尝试将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();

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

我是否编写了错误的代码或者Windows时间系统中存在一些微秒的不准确性?

1 个答案:

答案 0 :(得分:1)

这是朱利安日期表示为double这一事实的自然结果,其总是具有有限的准确性。例如,当前值约为2456348.78370906。这在小数点前给出了7位有效数字 - 而double只能精确到“约”15位小数。因此,我们在小数部分内有大约8个十进制数字的精确度......这意味着代表一天。

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

如果为朱利安日期添加常量,事情看起来更加乐观 - 此时当前值仅为41330左右,因此精度值中有更多“空间”就一天中的时间而言。基本上,从绝对值来看,浮点值越大,精度越差。 (相邻值之间的差距变大。)