InstallDate in Registry



  • In der Registry findet man beim Schlüssel
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion]
    u.a. folgenden Eintrag bei Windows 10 Pro (64):
    "InstallDate"=dword:5bb61de2

    Wenn ich mit
    System.DateTime fCreationTime1 = System.DateTime.FromFileTime(0x5bb61de2);
    versuche, dieses Datum zu wandeln, erhalte ich: 01.01.1601 01:02.08
    Das ist Unfug.
    In welchem Format ist das gespeichert ?
    Wie kommt man zum korrekten Datum und ggf. zur Uhrzeit ?



  • Laut How to Determine the Windows Installation Date with and without PowerShell ist das ein Unix-Datumswert (also seit 1.1.1970).

    Ab .NET 4.6 gibt es die Methode DateTimeOffset.FromUnixTimeSeconds(Int64) . Und mittels DateTimeOffset.DateTime erhältst du dann einen DateTime.



  • @Th69
    DANKE für Deine Hinweise.
    Daraus habe ich erfahren, dass diese Zahl die Anzahl Sekunden seit dem 01.01.1970 00:00:00 Uhr ist. Man kann aus diesen Sekunden ziemlich einfach Datum und Uhrzeit ermitteln.
    Mit FromUnixTimeSeconds bin ich nicht zurecht gekommen.



  • @hkdd sagte in InstallDate in Registry:

    Mit FromUnixTimeSeconds bin ich nicht zurecht gekommen.

    Was ist dabei dein Problem!?



  • @Swordfish ,
    ich weiß nicht, wie ich den Aufruf einbinden soll

    public static DateTimeOffset FromUnixTimeSeconds(long seconds);

    DateTimeOffset.DateTime gibt es bei mir nicht.
    Muss dazu eine bestimmte using-Anweisung eingebunden werden ?



  • DateTimeOffset.DateTime ist eine Instanz-Eigenschaft, keine statische:

    long seconds = 4711;
    
    var dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(seconds);
    DateTime dateTime = dateTimeOffset.DateTime;
    


  • @Th69
    Hallo Ihr beiden Helfer.
    Wie immer sitzt das Problem vor dem Monitor.
    Mein Fehler 1: ich hatte noch 4.5 statt 4.6 oder größer eingestellt. Deshalb war FromUnixTimeSeconds nicht benutzbar. Mit 4.6 klappt es.
    Hier mein jetzt funktionierendes Beispiel: Es wird korrekt 20.11.2018 07:56:43 zurück gegeben.

    long unixDateTime = 0x5C00DF2A;
    var localDateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(unixDateTime).DateTime.ToLocalTime();
    

    @Th69 ,
    ich habe Deinen Code ausprobiert, da kommt 20.11.2018 06:56:43 heraus, also eine Stunde weniger 6 Uhr statt 7 Uhr. Das liegt an der Linux-Zeit, die sich i.d.R. nach Greenwich richtet, also eine Stunde vor unserer Zeit. ToLocalTime() bringt das offenbar in Ordnung.

    long seconds = 0x5C00DF2A;
    var dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(seconds);
    DateTime dateTime = dateTimeOffset.DateTime.ToLocalTime();
    

Anmelden zum Antworten