Sichere Zeit­verarbeitung in .NET-Projekten

Sichere Zeit­verarbeitung in .NET-Projekten
03/2026
Eduard L. | Solution Engineer

TL;DR

Zeitverarbeitung in .NET ist komplexer als sie scheint. Standardtypen wie DateTime führen häufig zu Fehlern bei Zeitzonen, Sommerzeit oder Tests.

NodaTime bietet klar definierte Typen wie Instant, LocalDateTime oder ZonedDateTime und basiert auf der TZ Database. Das Ergebnis: präzisere Semantik, bessere Testbarkeit und weniger produktive Fehler.

Präzise und sichere Zeitverarbeitung in .NET-Projekten

‍

Motivation: Zeit ist komplizierter, als sie aussieht.

In fast jedem Softwareprojekt spielt Zeit eine Rolle, sei es bei Terminen, Buchungen, Logdaten, medizinischen Messwerten oder automatisierten Prozessen. Doch die Arbeit mit Zeitangaben in .NET ist oft fehleranfällig. Klassische Typen wie DateTime oder DateTimeOffset sind zwar bequem, verbergen aber viele Fallstricke, wie unklare Bedeutung (lokal, UTC oder unspecified?), Sommerzeit-Umstellungen, fehlende Zeitzoneninformationen und schwierige Tests. Diese Probleme führen in der Praxis regelmäßig zu schwer auffindbaren Bugs, besonders in internationalen oder langlaufenden Systemen.

‍

Die Lösung: NodaTime

NodaTime ist eine Open-Source-Bibliothek für .NET, entwickelt von Jon Skeet (Google). Sie basiert auf dem bewährten Java-Konzept Joda-Time und verfolgt das Ziel, Zeitverarbeitung explizit, verständlich und korrekt zu machen. Statt nur einen einzigen Typ für alles zu verwenden, bietet NodaTime eine klare Typenhierarchie.

‍

Folgende wichtige Typen gehören dazu:

Instant: Ein eindeutiger Zeitpunkt auf der universellen Zeitlinie (z. B. ein Log-Timestamp).

LocalDate: Ein Datum ohne Uhrzeitangabe und ohne Zeitzone (z. B. ein Geburtstag).

LocalTime: Eine Uhrzeit ohne Datum (z. B. Öffnungszeiten).

LocalDateTime: Datum und Uhrzeit, aber ohne Zeitzoneninformation.

ZonedDateTime: Ein vollständiger Zeitstempel mit Zeitzone (z. B. ein Buchungszeitpunkt).

Duration: Eine feste Zeitspanne in Ticks.

Period: Eine kalendarische Zeitspanne (z. B. 1 Monat und 3 Tage).

‍

Dieser bewusste Unterschied zwischen "wann" und "was für ein Datum/eine Uhrzeit in welcher Zeitzone" führt zu deutlich robusterem und ausdrucksstärkerem Code.

‍

Anwendungsbeispiele

‍

Beispiel 1: Ein Datum ohne Zeitzone speichern

‍

NodaTime Codebeispiel in .NET

‍

Eine LocalDate repräsentiert ein reines Datum, unabhängig von Zeitzonen oder Uhrzeiten.

‍

Beispiel 2: Zeitzonen korrekt handhaben

‍

NodaTime Zeitzone Beispiel

‍

Der DateTimeZoneProvider liefert die gewünschte Zeitzone. Mit InZoneLeniently wird der lokale Zeitpunkt in einen vollständigen ZonedDateTime umgewandelt, der alle Zeitzonenwechsel korrekt berücksichtigt.

‍

Beispiel 3: Zeitspannen berechnen

‍

NodaTime LocalDate Codebeispiel

‍

Mit Period.Between lassen sich kalendarische Differenzen exakt berechnen, ohne die typischen Fallstricke von DateTime.

‍

Beispiel 4: Serialisierung mit System.Text.Json

‍

NodaTime Instant und Duration Beispiel

‍

NodaTime.Serialization.SystemTextJson bietet direkte Unterstützung für den modernen JSON-Serializer von .NET. Damit lassen sich NodaTime-Typen problemlos in ASP.NET Core-APIs und modernen .NET-Projekten verwenden.

‍

Beispiel 5: Testen mit fixer Zeit

‍

NodaTime Konfiguration in .NET

‍

Durch die Verwendung von IClock statt DateTime.UtcNow ist der Code testbar: Im Produktivbetrieb wird SystemClock.Instance genutzt, im Test eine FakeClock mit fixer Zeit.

‍

Integration in ASP.NET Core

NodaTime lässt sich leicht in ASP.NET Core integrieren. Zusätzliche Pakete wie NodaTime.Serialization.SystemTextJson ermöglichen eine nahtlose JSON-Verarbeitung.

‍

Fazit

NodaTime ist eine ausgereifte, gut dokumentierte Bibliothek, die Zeitverarbeitung in .NET auf ein neues Niveau hebt. Sie macht implizite Annahmen explizit, reduziert typische Bugs und verbessert die Testbarkeit. Besonders für internationale Systeme, medizinische Anwendungen oder Buchungsplattformen ist sie empfehlenswert. Wer mit komplexer Zeitlogik in .NET arbeitet, sollte NodaTime kennen.

‍

Ressourcen & weiterführende Links

https://nodatime.org/

https://github.com/nodatime/nodatime

https://github.com/nodatime/nodatime.serialization

‍

Das vollständige Codebeispiel aus diesem Artikel findest du auf GitHub unter: https://github.com/Nutzlastkaktus8/NodaTimeBeispiele.git

‍

Eduard L. | Solution Engineer
Eduard L. | Solution Engineer

Developer Training

Diese Beiträge entstehen aus der täglichen Arbeit unserer Entwicklerinnen und Entwickler. Devware gibt dieses Wissen auf Anfrage auch als Schulung weiter, zu .NET, Blazor und anderen Sprachen.
Pfeil-Icon – Mehr erfahren

Mehr zum Thema

Pfeil nach rechts (Verlinkung)
Behaviors in WPF
10/2026

Behaviors in WPF

Blauer Pfeil nach rechts (Verlinkung)
Angular: Webcam ansteuern
09/2026

Angular: Webcam ansteuern

Blauer Pfeil nach rechts (Verlinkung)
Unittests in C#
09/2026

Unittests in C#

Blauer Pfeil nach rechts (Verlinkung)
KI in der Software­entwicklung: welche Werkzeuge wir einsetzen und wie Ihre Daten geschützt sind
09/2026

KI in der Software­entwicklung: welche Werkzeuge wir einsetzen und wie Ihre Daten geschützt sind

Blauer Pfeil nach rechts (Verlinkung)