【问题标题】:How do I create a Descriptive DateConverter in C#?如何在 C# 中创建描述性 DateConverter?
【发布时间】:2013-06-04 21:09:52
【问题描述】:

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

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

以较大的增量为准。

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

【问题讨论】:

标签: c# datetime twitter datediff


【解决方案1】:

你可以减去两个日期时间对象,它会返回TimeSpan 你可以得到Seconds TimeSpan 的属性

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

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

那你想要timespan.TotalSeconds

【讨论】:

    【解决方案2】:

    改用扩展方法怎么样,比如

    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() 来计算差异,然后只需使用上述扩展方法,只需以类似的方式对其进行格式化。有关详细信息,请参阅“查找两个值之间的句点”here 部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      • 2014-04-25
      • 2015-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-17
      相关资源
      最近更新 更多