2017-07-03 128 views
0

是否將具有微秒的日期時間值轉換爲精確的雙精度值?DateTime以微秒爲單位

例如,我的日期爲2017年7月3日10:00:00 00 Ticks 636346728000000050。其中轉換爲雙重,因爲我得到42919.4166666667。同樣,我已經將50 Ticks添加到當前日期即。 2017年7月3日10:00:00 00 Ticks 636346728000000100它轉換爲double,也獲得相同的double值,但ticks值已添加到日期。

我用這種方法date.ToOADate()

任何人都可以請解決此轉換成double?提前:)

+1

測量時間中沒有「準確的精確度」。 – vijoc

+0

你爲什麼要將它轉換成雙精度? – Magnus

+0

在我的要求中,我已將某些操作轉換爲雙精度。 – Parthiban

回答

3

50蜱

由於不能在OLE自動化日期來表示。此代碼:

DateTime d1 = DateTime.Parse("3 July 2017 10:00:00"); 
DateTime d2 = d1.AddTicks(100); 
double o2 = d2.ToOADate(); 
Console.WriteLine(o2); 

DateTime d3 = d1.AddTicks(1000); 
double o3 = d3.ToOADate(); 
Console.WriteLine(o3); 

DateTime d4 = d1.AddTicks(10000); 
double o4 = d4.ToOADate(); 
Console.WriteLine(o4); 

生成輸出:

42919,4166666667 
42919,4166666667 
42919,4166666782 

,所以你至少需要10000只蜱爲加有一定影響。

+0

在我的回答中,我認爲使用ToOADate是一項要求。重讀這個問題,我發現這個問題沒有明確地說,它只是談論將日期時間轉換爲雙倍。 –

+0

感謝您的努力。是。我只需要將日期時間轉換爲雙倍。如您所說,只有10000個滴答聲(1毫秒)會產生影響。我的問題是有任何其他方式通過添加微秒日期來轉換? – Parthiban

1

這裏有兩個獨立的邏輯運算:

  • 蜱轉換到微秒。這基本上是一個10分之一(每個滴答中有100納秒或0.1微秒)的問題,這樣就可以在整數運算中丟失信息 - 但是添加50個滴答滴答恰好增加了5微秒,所以應該沒問題。

  • 將整數轉換爲二進制浮點數。您的值有17位重要的十進制數字,位於64位二進制浮點類型可以表示的較高端。您不應該依賴超過15個重要的十進制數字。

最重要的是,你使用ToOADate,這似乎具有精確到毫秒,看着reference source

所以:

  • 你可以只劃分Ticks 10獲得微秒,只有失去的精度少量
  • 你可以從long轉換爲double以不同的方式,這將失去更少的信息比ToOADate,但你仍然會在很多情況下失去信息。
  • 如果你除以10.0(所以避免整數算術開始),然後根據你想表示的值,你可以避免丟失任何信息。

如果你能選擇適合您double值不同的時代,你可以輕鬆地表達與適當的精度值微秒 - 但你需要知道的值,你需要以檢查表達範圍並且使用生成的double值來控制其餘代碼。

相關問題