【问题标题】:DateTime comparison, minus certain timeframe? c#日期时间比较,减去某个时间范围? C#
【发布时间】:2011-02-28 10:51:03
【问题描述】:

假设我有这两个 DateTime 对象:

var dt1 = new DateTime(1900,12,1,1,1,1);
var dt2 = new DateTime(1900, 12, 1, 1, 59, 1);

显然,如果我执行DateTime.Compare(dt1,dt2),该方法将返回一个值,表明它们不相等(因为 59/分钟组件)。

如果我只想将精度限制在某个值(即同一天 - 不关心小时/分钟等)进行比较,那么最好的方法是重建每个 datetime 对象吗?

DateTime.Compare(new DateTime(dt1.Year,dt1.Month,dt1.Day,1,1,1),new DateTime(dt2.Year,dt2.Month,dt2.Day,1,1,1))

或者有更聪明的方法吗?

【问题讨论】:

  • 另外,59 小时不是有效时间 :)

标签: c# datetime


【解决方案1】:

已经有一个内置函数可以从 DateTime 中获取日期,即Date 属性:

DateTime.Compare(dt1.Date,dt2.Date)

理论上,您可以按顺序比较年、月和日,而不是构建新的 DateTime,但由于 DateTime 是一个小型结构,因此构建它相当便宜,不会导致堆分配等。而且代码更具可读性。

【讨论】:

    【解决方案2】:

    如果您只想要相同的日期,只需比较 Date 属性:

    dt1.Date == dt2.Date
    

    如果您需要减少到同一小时或最多同一个月,则需要使用所示的构造函数。

    【讨论】:

      【解决方案3】:

      同一天很容易 - 只需使用 Date 属性:

      dt1.Date.CompareTo(dt2.Date)
      

      不过,对于其他粒度,您可能需要手动构建不同的值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-10
        相关资源
        最近更新 更多