Удобочитаемые форматы даты - PullRequest
9 голосов
/ 26 декабря 2009

Возможно, вы заметили, что некоторые веб-приложения (например, определенные части GMail) отображают даты в более понятном для человека формате, чем просто ДД / ММ / ГГГГ.

Например, если я открою почтовое сообщение от 23-го числа (что происходит на момент написания 3 дня назад, я получу следующее:

23 декабря (3 дня назад)

Я хотел бы реализовать аналогичную логику для этого в моем собственном веб-приложении.

Например, при работе с объектом .NET TimeSpan я хотел бы преобразовать его в текст, такой как следующий:

2 месяца

3 дня

Есть ли библиотека .NET, способная сделать это уже?

Если нет, я мог бы создать что-то простое и открытое.


Я сделал здесь базовое начало:

public static class TimeSpanHelpers
{
    public static string ToHumanReadableString(
        this TimeSpan timeSpan)
    {
        if (timeSpan.TotalDays > 30)
            return (timeSpan.TotalDays / 30) + " month(s)";

        if (timeSpan.TotalDays > 7)
            return (timeSpan.TotalDays / 7) + " week(s)";

        return (timeSpan.TotalDays) + " day(s)";
    }
}

Ответы [ 4 ]

12 голосов
/ 14 октября 2014

Попробуйте Humanizer http://humanizr.net/

TimeSpan.FromMilliseconds(1299630020).Humanize(3) => "2 weeks, 1 day, 1 hour"

// in de-DE culture
TimeSpan.FromDays(1).Humanize() => "Ein Tag"
TimeSpan.FromDays(2).Humanize() => "2 Tage"

// in sk-SK culture
TimeSpan.FromMilliseconds(1).Humanize() => "1 milisekunda"

// and a lot more
DateTime.UtcNow.AddHours(2).Humanize() => "2 hours from now"
"case".ToQuantity(5) => "5 cases"
"man".ToQuantity(2) => "2 men"
122.ToWords() => "one hundred and twenty-two"
(.5).Gigabytes().Humanize() => "512 MB"
"Long text to truncate".Truncate(10) => "Long text…",
"Sentence casing".Transform(To.TitleCase) => "Sentence Casing"

NuGet:

Install-Package Humanizer
7 голосов
/ 26 декабря 2009

Группа Noda Time выполняет только это. Приходите и присоединяйтесь к веселью. Забыл упомянуть местоположение проекта Время Нода Проект

1 голос
/ 17 мая 2011

Еще одна библиотека для этого: http://relativetime.codeplex.com/

(доступно на NuGet)

0 голосов
/ 04 марта 2016

Я использовал этот метод , так как мне нужно было поддерживать будущие даты, например, через 3 дня.

...