如何在C#中创建描述性DateConverter?

时间:2013-06-08 19:33:27

标签: c# datetime twitter datediff

我有一个DateConverter类,可以完成所有基础知识。但是,我想为它添加另一种类型。我希望能够有一个'Descriptive'类型,它返回日期和DateTime.Now格式化为字符串之间的差异。

IE:“秒前”,“7分钟前”,“8小时前”

无论哪个更大的增量。

我想我唯一缺少的就是弄清楚如何在几秒钟内得出两个日期之间的差异。 C#对我来说还是有点新鲜。

2 个答案:

答案 0 :(得分:1)

你可以减去两个日期时间对象,它将返回TimeSpan 并且您可以获得TimeSpan的Seconds属性

var timespan = (datetime1 - datetime2);
var seconds = timespan.Seconds;
var Minutes = timespan.Minutes;
var hours = timespan.Hours;
  

我想我唯一缺少的是弄清楚如何获得   两个日期之间的差异,以秒为单位。

然后你想要timespan.TotalSeconds

答案 1 :(得分:0)

如何使用扩展方法,比如

public static string FromNowFormatted(this DateTime date)
{
    var sb = new StringBuilder();

    var t = DateTime.Now - date;

    var dic = new Dictionary<string, int>
              {
                  {"years", (int)(t.Days / 365)},
                  {"months", (int)(t.Days / 12)},
                  {"days", t.Days},
                  {"hours", t.Hours},
                  {"minutes", t.Minutes},
                  {"seconds", t.Seconds},
              };

    bool b = false;
    foreach (var e in dic)
    {                
        if (e.Value > 0 || b)
        {
            var v = e.Value;
            var k = v == 1 ? e.Key.TrimEnd('s') : e.Key ;

            sb.Append(v + " " + k + "\n");
            b = true;
        }
    }

    return sb.ToString();
}

demo

注意:您需要修改此代码的一些内容,例如计算年数和月数的方法。

编辑:您可以使用Noda Time的Period.Between()来计算差异,然后只需要一个如上所述的扩展方法,只需以类似的方式对其进行格式化。请参阅第2章“查找两个值之间的时间段”here以获取更多信息。