人类可读的日期格式

时间:2009-12-26 07:18:39

标签: c# .net date user-experience timespan

您可能已经注意到某些Web应用程序(例如,GMail的某些部分)以比DD / MM / YYYY更人性化的格式显示日期。

例如,如果我打开23日的邮件(在撰写本文时恰好是3天前,我会得到以下内容:

  

Dec 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 个答案:

答案 0 :(得分:12)

尝试使用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

答案 1 :(得分:7)

Noda Time小组正在做这件事。快来加入吧。忘了提到项目地点Noda Time项目

答案 2 :(得分:1)

另一个执行此操作的库:http://relativetime.codeplex.com/

(可在NuGet上使用)

答案 3 :(得分:0)

我最终使用了this method,因为我需要支持将来的日期,例如3天后。