Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从日期返回正确的时间测量值_C#_Datetime - Fatal编程技术网

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);
}