C# 从日期返回正确的时间测量值
我想一个方法,返回一个字符串从日期,看起来像在社会媒体网站和论坛 例子C# 从日期返回正确的时间测量值,c#,datetime,C#,Datetime,我想一个方法,返回一个字符串从日期,看起来像在社会媒体网站和论坛 例子 2秒前添加 3分钟前加的 两周前加的 一个月前加的 等等 我向它传递一个DateTime对象,它根据currentDate和传递给方法的日期之间的差异返回一个字符串 我知道如何使用timespan获得日期之间的差异,但如何从秒到分钟到小时到天到周进行适当的切换 例如,如果日期之间的差异为120分钟,我不希望它返回120分钟,我希望它返回2小时 如何切换 我更喜欢自定义方法,以便将字符串的语言更改为阿拉伯语。可以使用库更改
- 2秒前添加
- 3分钟前加的
- 两周前加的
- 一个月前加的
DateTime
对象,它根据currentDate
和传递给方法的日期之间的差异返回一个字符串
我知道如何使用timespan获得日期之间的差异,但如何从秒到分钟到小时到天到周进行适当的切换
例如,如果日期之间的差异为120分钟,我不希望它返回120分钟,我希望它返回2小时
如何切换
我更喜欢自定义方法,以便将字符串的语言更改为阿拉伯语。可以使用库更改语言吗
谢谢
阿卜杜拉(Abdullah)在C#中,有一个名为“人性化者”(Humanizer)的图书馆为您提供这项服务
Humanizer还支持多种语言,您可以在此处看到所有语言:
顺便说一句,它已经支持阿拉伯语
请参见下面的示例
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语法
如果您想构建自己的代码,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);
}
当然,您可以添加更多的案例来处理天数、月份等。到目前为止您尝试过什么吗?如果我为您回答这个简单的问题,我希望尽快向我支付预付款。。你到底做了什么,或者尝试了什么。。另外,请阅读以下内容,我知道如何使用TimeSpan获得差异,但如何使用秒设置限制并切换到mintues。这就是我需要帮助的地方
help
意味着你已经发布了代码,为我们提供了一个起点。看看momentjs库或livestampjs库-我想你会在那里找到你需要的东西。你为什么要使用外部库来完成这么简单的事情,是否集成在框架本身中?@cfrozendath这不集成在.NET framework中。此外,Humanizer是一个功能强大的库,可以处理很多其他事情,不仅仅是datetime。我这么说是指datetime非常容易使用,一个简单的方法可以轻松做到这一点。我仍然不认为添加第三方库有什么意义(顺便说一句,如果在企业环境中工作,这并不容易),我真的很羡慕你。我的公司政策告诉我们,我们不能使用非微软开发的库(如微软的NuGet软件包)或付费的第三方库,相信我,这是不可能轻易获得的。@cfrozendath我为你感到难过,在我的团队中,我们可以决定使用什么,C#版本和其他许多东西。我在项目中添加的最后一个包是Akka.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);
}