Wie man relative Zeit in C# berechnet

Beim Arbeiten mit Daten und Zeiten in C# kann es notwendig sein, auszudrücken, wie viel Zeit seit einem bestimmten Ereignis vergangen ist. Dies kann die Benutzererfahrung verbessern, indem die Zeit in einem leicht verständlichen Format angezeigt wird, wie z. B. “vor 2 Stunden” oder “vor einem Monat”. In diesem Beitrag werden wir untersuchen, wie man diese Funktionalität mit den Klassen DateTime und TimeSpan in C# implementiert.

Das Konzept der relativen Zeit

Relative Zeit bezieht sich darauf, die seit einem bestimmten Ereignis vergangene Zeit in leicht verständlicher Sprache auszudrücken. Anstatt genaue Zeitstempel anzuzeigen, macht die Anzeige von Zeiten wie “vor 3 Tagen” oder “gestern” es einfacher für die Benutzer, die vergangene Zeit zu verstehen, ohne dass sie mentale Berechnungen anstellen müssen.

Implementierung relativer Zeit in C#

So berechnen Sie die relative Zeit mit einem DateTime-Wert in C#:

Schritt 1: Konstanten für Zeitintervalle definieren

Zuerst müssen Sie Konstanten festlegen, die verschiedene Zeitintervalle repräsentieren. Dies macht Ihren Code übersichtlicher und verständlicher.

const int SEKUNDE = 1;
const int MINUTE = 60 * SEKUNDE;
const int STUNDE = 60 * MINUTE;
const int TAG = 24 * STUNDE;
const int MONAT = 30 * TAG;

Schritt 2: Berechnung des TimeSpan

Um zu bestimmen, wie viel Zeit vergangen ist, berechnen Sie den TimeSpan zwischen der aktuellen Zeit und dem gegebenen DateTime.

var ts = new TimeSpan(DateTime.UtcNow.Ticks - yourDate.Ticks);
double delta = Math.Abs(ts.TotalSeconds);

Schritt 3: Bestimmen Sie das geeignete Zeitformat

Mit dem berechneten TimeSpan können Sie nun bestimmen, wie Sie die relative Zeit formatieren, indem Sie bedingte Anweisungen verwenden.

Hier ist, wie Sie den entsprechenden String basierend auf verschiedenen Intervallen zurückgeben können:

if (delta < 1 * MINUTE)
    return ts.Seconds == 1 ? "vor einer Sekunde" : "vor " + ts.Seconds + " Sekunden";

if (delta < 2 * MINUTE)
    return "vor einer Minute";

if (delta < 45 * MINUTE)
    return "vor " + ts.Minutes + " Minuten";

if (delta < 90 * MINUTE)
    return "vor einer Stunde";

if (delta < 24 * STUNDE)
    return "vor " + ts.Hours + " Stunden";

if (delta < 48 * STUNDE)
    return "gestern";

if (delta < 30 * TAG)
    return "vor " + ts.Days + " Tagen";

if (delta < 12 * MONAT)
{
    int monate = Convert.ToInt32(Math.Floor((double)ts.Days / 30));
    return monate <= 1 ? "vor einem Monat" : "vor " + monate + " Monaten";
}
else
{
    int jahre = Convert.ToInt32(Math.Floor((double)ts.Days / 365));
    return jahre <= 1 ? "vor einem Jahr" : "vor " + jahre + " Jahren";
}

Abschließende Gedanken

Der obige Code-Schnipsel ermöglicht es Ihnen, die relative Zeit effektiv zu berechnen und in unkomplizierter Weise anzuzeigen. Wenn Sie dies in Ihrer C#-Anwendung implementieren, können Sie die Benutzbarkeit verbessern, indem Sie Datumsreferenzen für die Benutzer nachvollziehbarer machen.

Jetzt sind Sie mit einem praktischen Weg ausgestattet, Ihre Anwendung mit relativen Zeitdarstellungen zu verbessern. Viel Spaß beim Programmieren!