NodaTime für C# (.NET): Vollständiges Tutorial mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

NodaTime für C# (.NET): Vollständiges Tutorial mit Beispielen

Die Arbeit mit Datum und Uhrzeit gehört zu den komplexesten und fehleranfälligsten Aufgaben in der Softwareentwicklung. Die integrierten Typen DateTime und DateTimeOffset in .NET haben grundlegende Probleme: Verwechslung von lokaler und UTC-Zeit, fehlende klare Trennung zwischen "Zeitpunkt" und "Kalenderdatum", sowie Unklarheiten bei Zeitzonen und Sommerzeit. Die Bibliothek NodaTime wurde entwickelt, um diese Probleme zu lösen, und bietet Entwicklern eine sichere, ausdrucksstarke und typsichere API für die Zeitarbeit.

NodaTime ist eine alternative Bibliothek für die Arbeit mit Datum und Uhrzeit in .NET, inspiriert von der Joda-Time-Bibliothek für Java. Sie bietet eine klare Trennung zwischen verschiedenen Zeitkonzepten: Instant (ein Zeitpunkt), LocalDateTime (Datum und Uhrzeit ohne Zeitzone), ZonedDateTime (Datum und Uhrzeit mit Zeitzone), Duration (Zeitspanne in Nanosekunden) und Period (Zeitspanne in Kalendereinheiten). Die Bibliothek verwendet Zeitzonendaten von der IANA (tzdata-Datenbank), was sie genauer und aktueller macht als die integrierten Windows-Mechanismen.

Das Hauptziel von NodaTime ist es, fehlerhafte Zeitoperationen auf Kompilierungsebene unmöglich zu machen. Beispielsweise können Sie nicht versehentlich LocalDateTime mit Duration addieren (da dies ohne Zeitzone keinen Sinn ergibt) oder Instant mit LocalDate vergleichen. Die Bibliothek bietet auch leistungsstarke Funktionen für Formatierung, Parsing, Zeitzonenarbeit und Kalendersysteme (einschließlich julianischem, islamischem und hebräischem Kalender).

Installation

Um NodaTime in einem .NET-Projekt zu installieren, verwenden Sie den NuGet Package Manager. Führen Sie einen der folgenden Befehle aus:

# Über die .NET CLI (empfohlen)
dotnet add package NodaTime

# Über die Package Manager Console (Visual Studio)
Install-Package NodaTime

# Oder über die NuGet Package Manager UI: Suchen Sie nach "NodaTime"

Fügen Sie nach der Installation die Direktive using NodaTime; am Anfang Ihrer Datei hinzu. Für die Arbeit mit Zeitzonen kann auch using NodaTime.TimeZones; erforderlich sein.

Schnellstart

Ein minimales Arbeitsbeispiel, das die grundlegenden Funktionen von NodaTime demonstriert:

using NodaTime;
using NodaTime.Text;

// 1. Aktueller Zeitpunkt in UTC
Instant now = SystemClock.Instance.GetCurrentInstant();
Console.WriteLine($"Aktueller Zeitpunkt (UTC): {now}");

// 2. Umwandlung in Ortszeit (Berlin)
DateTimeZone berlinZone = DateTimeZoneProviders.Tzdb["Europe/Berlin"];
ZonedDateTime berlinTime = now.InZone(berlinZone);
Console.WriteLine($"Zeit in Berlin: {berlinTime}");

// 3. Erstellen eines bestimmten Datums und einer Uhrzeit
LocalDateTime localDate = new LocalDateTime(2024, 12, 25, 10, 30, 0);
Console.WriteLine($"Lokales Datum: {localDate}");

// 4. Parsen eines Strings
var pattern = LocalDateTimePattern.CreateWithInvariantCulture("yyyy-MM-dd HH:mm:ss");
LocalDateTime parsed = pattern.Parse("2024-12-25 10:30:00").Value;
Console.WriteLine($"Geparst: {parsed}");

// 5. Arbeiten mit Dauern
Duration duration = Duration.FromHours(2.5);
Instant future = now + duration;
Console.WriteLine($"In 2,5 Stunden: {future.InZone(berlinZone)}");

Wichtige Klassen und Methoden

1. Instant — Ein Zeitpunkt

Signatur: public readonly struct Instant : IEquatable<Instant>, IComparable<Instant>

Funktion: Stellt einen Punkt auf der Zeitachse dar, gemessen in Nanosekunden seit der Unix-Epoche (1. Januar 1970, 00:00:00 UTC). Unabhängig von Zeitzonen.

Instant epoch = Instant.FromUnixTimeTicks(0); // Unix-Epoche
Instant now = Sy

Empfehlungen