我想要一个从日期返回字符串的方法,该字符串类似于社交媒体网站和论坛中的字符串。
实施例
等等
我传递了一个DateTime
对象,它根据currentDate
和传递给方法的日期之间的差异返回一个字符串。
我知道如何使用时间跨度来区分日期,但是如何适当地从几秒钟到几分钟到几小时到几天到几周呢?
例如,如果日期之间的差异为120分钟,我不希望它返回120分钟,我希望它返回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是开源的,您可以检查他们的源代码并创建自己的代码。
答案 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);
}
当然,您可以添加更多案例来处理日期,月份等。