从日期返回正确的时间测量值

时间:2016-01-05 23:39:27

标签: c# datetime

我想要一个从日期返回字符串的方法,该字符串类似于社交媒体网站和论坛中的字符串。

实施例

  • 2秒前添加
  • 添加3分钟前
  • 两周前添加
  • 一个月前添加

等等

我传递了一个DateTime对象,它根据currentDate和传递给方法的日期之间的差异返回一个字符串。

我知道如何使用时间跨度来区分日期,但是如何适当地从几秒钟到几分钟到几小时到几天到几周呢?

例如,如果日期之间的差异为120分钟,我不希望它返回120分钟,我希望它返回2小时。

如何进行此切换?

我更喜欢自定义方法,以便将字符串的语言更改为阿拉伯语。可以使用库更改语言吗?

由于 阿卜杜拉

2 个答案:

答案 0 :(得分:2)

在C#中有一个名为Humanizer的库可以为你完成。

Humanizer也支持多种语言,您可以在此处查看所有语言:https://github.com/Humanizr/Humanizer/tree/dev/src/Humanizer.Tests.Shared/Localisation

顺便说一下,它已经支持阿拉伯语。

参见下面的示例

DateTime.UtcNow.AddHours(-30).Humanize() => "yesterday"
DateTime.UtcNow.AddHours(-2).Humanize() => "2 hours ago"

DateTime.UtcNow.AddHours(30).Humanize() => "tomorrow"
DateTime.UtcNow.AddHours(2).Humanize() => "2 hours from now"

DateTimeOffset.AddHours(1).Humanize() => "an hour from now"

要使用它,只需使用nuget

安装此软件包即可
Install-Package Humanizer 

然后使用它

var displayString = string.Format("Added {0}", myObj.Date.Humanize());

C#6语法

var displayString = $"Added {myObj.Date.Humanize()";

如果您想构建自己的代码,Humanizer是开源的,您可以检查他们的源代码并创建自己的代码。

https://github.com/Humanizr/Humanizer

答案 1 :(得分:1)

这是一个过分简化的例子,说明了你只能使用.NET类:

public static string TimeSinceEvent(DateTime eventTime)
{
    TimeSpan timeSince = DateTine.Now - eventTime;
    if (timeSince.Hours > 0)
        return string.Format("Added {0} hours ago", timeSince.Hours);
    else if (timeSince.Minutes > 0)
        return string.Format("Added {0} minutes ago", timeSince.Minutes);
    else 
        return string.Format("Added {0} seconds ago", timeSince.Seconds);
}

当然,您可以添加更多案例来处理日期,月份等。