2009-05-02 8 views
3

Ich portiere eine Delphi-Anwendung auf C# und ich habe ein Problem festgestellt. Die Delphi-App zeichnet die Zeit in einer Protokolldatei auf, die dann in das Programm zurückgelesen wird. Aber das Format der Zeit, die es aufzeichnet, verwirrt mich. Ich kann keine .Net-Bibliothek finden, um sie richtig zu konvertieren.Benötigen Sie Hilfe zum Konvertieren von Delphi Time in .NET Zeit

Delphi aufgezeichnete Zeit in Protokolldatei: 976129709 (dies 2009.01.14 17.53.26 in der Delphi-Code umgewandelt wird)

haben
//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)); 

jemand irgendwelche Ideen, wie ich dieses lesen können in .Net?

+0

Warum wurde das abgelehnt? Gibt es eine einfache Lösung, die ich nicht sehe? – JimDaniel

Antwort

12

Delphi TSearchRec.Time Format ist der alte DOS 32-Bit Datum/Uhrzeit-Wert. Soweit ich weiß, gibt es keinen eingebauten Konverter dafür, also müssen Sie einen schreiben. Zum Beispiel:

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

Danke dafür. Ich werde es versuchen, wenn ich eine Chance bekomme. Klingt wie das könnte die Lösung sein. – JimDaniel

+0

Ich habe einen schnellen Test in einer Konsolen-App gemacht, und das scheint die richtige Antwort zu sein. – sisve

+0

Das Format der DOS-Dateitime ist beschrieben unter http://msdn.microsoft.com/en-us/library/ms724274(VS.85).aspx – VolkerK

0

Ich habe sowohl googeln und experimentieren versucht, beginnend mit Dummy-Code, um etwas zu finden, das der Unix-Epoche ähnlich ist.

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. 

Können Sie überprüfen, ob Ihre Eingabe korrekt ist?

Und für die Liebe des Flying Spaghetti Monster, geben Sie Ihr 12-Stunden-Zeitformat auf! ;)

+0

Danke für die Hilfe. Wird besorgt. Ich muss aber trotzdem rückwirkend arbeiten. – JimDaniel

Verwandte Themen