Frage

Hat jemand eine einfache Funktion zur Hand hat für ein Datum zu einem einfachen String konvertieren (mit .NET)?

z. 14-Oct-09 lesen würde "Heute", 13-Oct-09 lesen würde "Yesterday" und 7-Oct-09 lesen würden "1 vor einer Woche" etc ...

Cheers, Tim

War es hilfreich?

Lösung

Sie wäre in der Tat hat eine eigene Methode zu rollen, dies zu tun, wie JustLoren sagte.

Dies ist eine Erweiterung Methode, die ich verwendet habe. Es ist Skript Gatekiller in eine Erweiterung Methode. So voll Kredit zu ihm. Man könnte es leicht aber ändern Sie es wollen.

public static string ToTimeSinceString(this DateTime value)
{
    const int SECOND = 1;
    const int MINUTE = 60 * SECOND;
    const int HOUR = 60 * MINUTE;
    const int DAY = 24 * HOUR;
    const int MONTH = 30 * DAY;

    TimeSpan ts = new TimeSpan(DateTime.Now.Ticks - value.Ticks);
    double seconds = ts.TotalSeconds;

    // Less than one minute
    if (seconds < 1 * MINUTE)
        return ts.Seconds == 1 ? "one second ago" : ts.Seconds + " seconds ago";

    if (seconds < 60 * MINUTE)
        return ts.Minutes + " minutes ago";

    if (seconds < 120 * MINUTE)
        return "an hour ago";

    if (seconds < 24 * HOUR)
        return ts.Hours + " hours ago";

    if (seconds < 48 * HOUR)
        return "yesterday";

    if (seconds < 30 * DAY)
        return ts.Days + " days ago";

    if (seconds < 12 * MONTH) {
        int months = Convert.ToInt32(Math.Floor((double)ts.Days / 30));
        return months <= 1 ? "one month ago" : months + " months ago";
    }

    int years = Convert.ToInt32(Math.Floor((double)ts.Days / 365));
    return years <= 1 ? "one year ago" : years + " years ago";
}

Andere Tipps

So etwas wie diese Erweiterung Methode?

public static string Stringfy(this DateTime date)
{
    if ((DateTime.Now - date.Date).TotalDays == 0)
        return "Today";

    if ((DateTime.Now - date.Date).TotalDays == 1)
        return "Yesterday";

    // ...

    return "A long time ago, in a galaxy far far away...";
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top