2013-02-25 61 views
1

我想要的DateTime转换成公历日期和扭转它的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

这是自然的结果,儒略日期表示为double,这将始终具有有限的准确性。例如,当前值约为2456348.78370906。在小数点前给出7位有效数字 - double只能精确到“约”15位小数。所以我们在小数部分有大约8个十进制数字的小数部分......这意味着代表一天。

现在1天/ 100000000 = 0.000864秒。所以我只希望精度在毫秒级以下。

如果添加常数Julian日期,事情看起来相当乐观 - 在这一点上的电流值仅约41330,所以有更多的术语“房间”的精度值的范围内一天中的时间。基本上,绝对值越大,浮点值就越精确。 (相邻值之间的差距变大。)

+0

谢谢您的回答。奇怪的是DateTime.FromOADate(dt.ToOADate())与dt.ToJulianDate()。Julian2DT()完全相同,但与原始dt不同。 – 2013-02-25 07:13:23

+0

DateTime.FromOADate(dt.ToOADate())也有微秒精度问题。 – 2013-02-25 07:14:35