11

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

例如,如果我从 23 日(在撰写本文时恰好是 3 天前)打开一个邮件项目,我将得到以下信息:

12 月 23 日(3 天前)

我想在我自己的 Web 应用程序中实现与此类似的逻辑。

例如,在处理 .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

4 回答 4

14

尝试人性化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"

努盖特:

Install-Package Humanizer
于 2014-10-14T08:44:06.780 回答
7

Noda Time小组正在这样做。来吧,加入乐趣。忘了说项目地点野田时间项目

于 2009-12-26T07:20:40.710 回答
1

另一个这样做的库:http ://relativetime.codeplex.com/

(在 NuGet 上可用)

于 2011-05-17T01:29:22.970 回答
0

我最终使用了这种方法,因为我需要支持未来的日期,比如从现在起 3 天。

于 2016-03-03T23:12:30.360 回答