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

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"

ナゲット:

Install-Package Humanizer
于 2014-10-14T08:44:06.780 に答える
7

野田タイムグループはまさにこれを行っているところです。是非、楽しみに参加してください。プロジェクトの場所について言及するのを忘れていましたNoda Time project

于 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 に答える