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:5bb61de2Wenn 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 sollpublic 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();