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

本文关键字:时间 测量 日期 返回 | 更新日期: 2023-09-27 18:29:03

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

示例

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

等等

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

我知道如何使用时间跨度来获得日期之间的差异,但如何适当地从几秒到几分钟到几小时到几天到几周?

例如,如果日期之间的差异为120分钟,我不希望它返回120分钟,而是希望它返回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#语法

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

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

https://github.com/Humanizr/Humanizer

这是一个过于简化的例子,说明了只使用.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);
}

当然,您可以添加更多的案例来处理天、月等。