2009-05-02 26 views
3

我正在將一個Delphi應用程序移植到C#,並且遇到了問題。 Delphi應用程序將時間記錄到日誌文件中,然後再讀回到程序中。但它記錄的時間格式讓我感到困惑。我找不到.Net庫來正確轉換它。需要幫助將Delphi時間轉換爲.Net時間

德爾福記錄的時間在日誌文件中:976129709 (這被轉換爲2009年1月14日下午五時53分26秒在Delphi代碼)

//Here is the Delphi code which records it: 
IntToStr(DirInfo.Time); 

//Here is the Delphi code which reads it back in: 
DateTimeToStr(FileDateToDateTime(StrToInt(stringTime)); 

任何人有任何想法如何,我可以閱讀在.Net中?

+0

爲什麼這是低估。有沒有簡單的解決方案,我沒有看到? – JimDaniel 2009-05-02 16:07:16

回答

12

德爾福的TSearchRec.Time格式是舊的DOS 32位日期/時間值。據我所知,沒有內置的轉換器,所以你必須寫一個。例如:

public static DateTime DosDateToDateTime(int DosDate) 
{ 
    Int16 Hi = (Int16)((DosDate & 0xFFFF0000) >> 16); 
    Int16 Lo = (Int16)(DosDate & 0x0000FFFF); 

    return new DateTime(((Hi & 0x3F00) >> 9) + 1980, (Hi & 0xE0) >> 5, Hi & 0x1F, 
     (Lo & 0xF800) >> 11, (Lo & 0x7E0) >> 5, (Lo & 0x1F) * 2); 
} 
+0

謝謝你。當我有機會時,我會嘗試。這聽起來可能是解決方案。 – JimDaniel 2009-05-02 16:47:44

0

我試着用google搜索和試驗,從虛擬代碼開始找到類似於unix時代的東西。

var x = 976129709; 
    var target = new DateTime(2009, 1, 14, 17, 53, 26); 
    var testTicks = target.AddTicks(-x);  // 2009-01-14 17:51:48 
    var testMs = target.AddMilliseconds(-x); // 2009-01-03 10:44:36 
    var testS = target.AddSeconds(-x);  // 1978-02-08 22:44:57 
    // No need to check for bigger time units 
    // since your input indicates second precision. 

你能證實你的輸入是正確的嗎?

而對於飛行意大利麪怪物的愛,放棄你的12小時時間格式! ;)

+0

感謝您的協助。會做。然而,我仍然需要追溯工作。 – JimDaniel 2009-05-02 16:46:52