2013-02-25 60 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