C#: Konvertierung von Unixzeit nach DateTime und zurück

Vor kurzem stand ich vor dem Problem einen Unixzeit-Wert in eine DateTime-Struktur umzuwandeln, um diesen Wert dann in einem WPF-Dialog anzuzeigen. Was genau ist nun die Unixzeit? Seit Unix Version 6 zählt die Unixzeit die vergangenen Sekunden seit Donnerstag, dem 1. Januar 1970 00:00 Uhr UTC. Dieses Startdatum wird auch als The Epoch bezeichnet und ist das heute wohl weitest verbreitete interne Datumsformat von Computersystemen.

Die Darstellung des Datums als Sekunden seit der Unix-Epoche wird häufig verwendet, weil sie für Computerprogramme viel leichter zu verarbeiten ist als das „menschliche“ Datumsformat. Außerdem lassen sich mit diesen Werten leicht Zeiträume berechnen, indem man einfach den einen Wert vom anderen abzieht. Umstellung auf Sommer- oder Winterzeit spielen dann keine Rolle mehr. Aus diesem Grund wird dieser Wert auch gerne als Zeitstempel verwendet. In vielen modernen Server-Anwendungen spielt der Zeitstempel aufgrund dieser Vorteile weiterhin eine tragende Rolle, so etwa im Umfeld von PHP- oder MySQL-Applikationen bei der Unterscheidung und Generierung zeitbezogener Datenbank-Einträge.

Um jetzt eine Unixzeit in das DateTime-Format umzuwandeln kann man wie folgt vorgehen:

Durch die weite Verbreitung des Unixzeit-Formats werden in den verschiedenen Entwicklerforen unterschiedliche Implementierungen diskutiert. Die oben gezeigte ist eine der einfachsten Implementierungen ohne Validierung usw. Wer jedoch das aktuellste .NET-Framework 4.6 nutzt kann auf eine neue Standardfunktionalität zurückgreifen.

.NET-Framework v4.6

Wer das neue .NET-Framework v4.6 einsetzt muss nichts mehr selbst implementieren. Das .NET Framework bietet ab v4.6 standardmäßig die Umwandlung eines DateTime-Wertes in die entsprechende Unixzeit und zurück (hieran wird auch deutlich welche Bedeutung die Unixzeit zwischenzeitlich besitzt). Für die Umwandlung stehen die folgenden Methoden zur Verfügung:

MethodeBeschreibung
FromUnixTimeMillisecondsKonvertiert eine Unix-Zeit in Form der seit dem 1. Januar 1970 um 00:00:00Z verstrichenen Millisekunden in einen DateTimeOffset-Wert.
FromUnixTimeSecondsKonvertiert eine Unix-Zeit in Form der seit dem 1. Januar 1970 um 00:00:00Z verstrichenen Sekunden in einen DateTimeOffset-Wert.
ToUnixTimeMillisecondsGibt die Anzahl der Millisekunden zurück, die seit dem 1. Januar 1970 um 00:00:00.000Z verstrichen sind.
ToUnixTimeSecondsGibt die Anzahl der Sekunden zurück, die seit dem 1. Januar 1970 um 00:00:00Z verstrichen sind

Nachfolgend mal ein kleines Konsolenprogramm, das die Anwendung dieser neuen Methoden zeigt:

Der Output des oben gezeigten Programms sollte dann ungefähr so aussehen:

UnixTimeConversion

Weitere Informationen zu diesem Thema sind in den unten aufgeführten Weblinks zu finden.

Literaturverzeichnis und Weblinks

Abk.Quelle
[1]Unixzeit
[2]UTC - Koordinierte Weltzeit
[3]DateTimeOffset-Struktur
[4]Neuerungen .NET-Framework 4.6
Fork me on GitHub