Arbeit mit Daten in C# (.NET): Integrierte Werkzeuge und beliebte Bibliotheken
Die Arbeit mit Datums- und Zeitangaben ist eine der Kernaufgaben in jeder ernsthaften Entwicklung. Im C# (.NET)-Ökosystem gibt es dafür sowohl leistungsstarke integrierte Typen (DateTime, DateTimeOffset, TimeSpan) als auch Drittanbieter-Bibliotheken, die komplexe Operationen vereinfachen – wie die Arbeit mit Zeitzonen, menschenlesbare Darstellung und das Parsen nicht standardisierter Formate. In diesem Artikel werden wir die wichtigsten Werkzeuge für die Arbeit mit Daten in C# im Detail besprechen.
Integrierte .NET-Typen
Die Basisklasse System.DateTime bietet Methoden zum Erstellen, Vergleichen, für Arithmetik und Formatierung von Daten. Sie unterstützt einen Bereich vom 01.01.0001 bis 31.12.9999.
// Datum erstellenDateTime now = DateTime.Now; // lokale ZeitDateTime utcNow = DateTime.UtcNow; // UTCDateTime specific = new DateTime(2025, 3, 15, 14, 30, 0);
// ArithmetikDateTime tomorrow = now.AddDays(1);TimeSpan diff = tomorrow - now;Console.WriteLine(diff.TotalHours); // 24
// Parsingstring dateStr = "2025-12-31";DateTime parsed = DateTime.Parse(dateStr, CultureInfo.InvariantCulture);
// FormatierungConsole.WriteLine(now.ToString("dd.MM.yyyy HH:mm")); // 15.03.2025 14:30DateTimeOffset ist eine verbesserte Version, die den Offset relativ zur UTC speichert. Es wird für Anwendungen empfohlen, die mit verschiedenen Zeitzonen arbeiten.
DateTimeOffset nowOffset = DateTimeOffset.Now;Console.WriteLine(nowOffset.Offset); // +03:00 (systemabhängig)TimeSpan – zur Darstellung von Zeitintervallen. Ideal zum Messen der Dauer von Operationen.
TimeSpan duration = new TimeSpan(2, 15, 30); // 2 Stunden 15 Minuten 30 SekundenConsole.WriteLine(duration.TotalMinutes); // 135.5Bibliothek NodaTime
NodaTime ist eine alternative Bibliothek für die Arbeit mit Datums- und Zeitangaben, erstellt von Jon Skeet (Autor von C#-Büchern). Sie löst viele Probleme von DateTime, wie Mehrdeutigkeit und das Fehlen einer strengen Typisierung von Zeitzonen.
Installation über NuGet:
dotnet add package NodaTimeWichtige Typen:
Instant– ein Zeitpunkt (Analog zu Unix-Timestamp)LocalDateTime– Datum+Zeit ohne ZeitzonenbindungZonedDateTime– Datum+Zeit in einer bestimmten ZeitzoneDurationundPeriod– Intervalle (Analog zu TimeSpan, aber Period berücksichtigt Kalendereinheiten)
using NodaTime;
// Aktueller Moment in UTCInstant now = SystemClock.Instance.GetCurrentInstant();Console.WriteLine(now.ToDateTimeUtc()); // kann in DateTime umgewandelt werden
// Arbeit mit ZeitzonenDateTimeZone tz = DateTimeZoneProviders.Tzdb["Europe/Moscow"];ZonedDateTime moscowTime = now.InZone(tz);Console.WriteLine(moscowTime); // 2025-03-15T17:30:00 Europe/Moscow (+03)
// Period – Differenz in KalendereinheitenLocalDate start = new LocalDate(2024, 1, 1);LocalDate end = new LocalDate(2025, 3, 15);Period period = Period.Between(start, end);Console.WriteLine($"Vergangen {period.Years} Jahre, {period.Months} Monate, {period.Days} Tage");// Vergangen 1 Jahre, 2 Monate, 14 TageVorteile von NodaTime: strenge Typisierung, korrekte Arbeit mit historischen Zeitzonen, Unterstützung für Kalender (islamisch, jüdisch usw.), keine Mehrdeutigkeiten bei Zeitumstellungen.
Bibliothek Humanizer
Humanizer ist eine Bibliothek zur "Vermenschlichung" von Daten, einschließlich Datums- und Zeitangaben und Intervallen. Sie ermöglicht die Ausgabe von Daten in einer lesbaren Form: "gestern", "in 3 Stunden", "vor 2 Tagen".
Installation:
dotnet add package HumanizerAnwendungsbeispiele
Auch in der Bibliothek
Arbeit mit CSV in C++: Bibliotheken, Parsing und Datenschreiben
Autorisierung und Authentifizierung in C# (.NET): Vollständiger Leitfaden
HTTP-Client für Go (Golang): Top-Bibliotheken für die Arbeit mit HTTP
JMH Java: Vollständiges Tutorial mit Beispielen und Tipps