0

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

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

以较大的增量为准。

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

4

2 回答 2

1

you can subtract two datetime objects and it will return TimeSpan and you can get Seconds property of TimeSpan

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

I suppose the only thing I am missing is figuring out how to get the difference between the two dates in seconds.

then you want timespan.TotalSeconds

于 2013-06-08T19:39:05.980 回答
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();
}

演示

注意:此代码有一些东西需要您修复,例如计算年份和月份的方式。

编辑:您可以使用 Noda Time 的 Period.Between() 来计算差异,然后只使用上面的扩展方法,它会以类似的方式简单地格式化它。有关更多信息,请参见此处的“查找两个值之间的句点”部分。

于 2013-06-08T20:30:38.530 回答