【问题标题】:Why my IEnumerable of dates doesn't contains my date为什么我的 IEnumerable 日期不包含我的日期
【发布时间】:2010-08-18 18:24:58
【问题描述】:

我有一份巴西假期的清单,所以我得到了这个:

[0] {01/01/2010 00:00:00}   System.DateTime
[1] {16/02/2010 00:00:00}   System.DateTime
[2] {02/04/2010 00:00:00}   System.DateTime
[3] {04/04/2010 00:00:00}   System.DateTime
[4] {21/04/2010 00:00:00}   System.DateTime
[5] {01/05/2010 00:00:00}   System.DateTime

[6] {03/06/2010 00:00:00}   System.DateTime

[7] {07/09/2010 00:00:00}   System.DateTime
[8] {12/10/2010 00:00:00}   System.DateTime
[9] {02/11/2010 00:00:00}   System.DateTime
[10]{15/11/2010 00:00:00}   System.DateTime
[11]{25/12/2010 00:00:00}   System.DateTime

当在一个方法中我收到dateTime = {03/06/2010 19:00:00} 并调用:

HolidayDates.Contains(dateTime)

为什么它返回假?处理包含日期的更好方法是什么?

【问题讨论】:

    标签: c# date


    【解决方案1】:

    它返回 false 因为您的 dateTime 值具有时间分量,所以它是不同的时间。

    剥离时间组件调用

    HolidayDates.Contains(dateTime.Date)
    

    如果您始终将日期存储在 IEnumerable 中,并将 00:00:00 作为时间组件,那么这将起作用。

    【讨论】:

      【解决方案2】:

      该集合中没有该值。有一个匹配的日期,但您的时间是 19:00,而集合中的时间是 00:00。

      如果你使用詹姆斯的答案:

      HolidayDates.Select(d => d.Date).Contains(dateTime.Date)
      

      集合中的项目中是否有时间组件无关紧要。它总是只比较日期部分。

      【讨论】:

      • 仅比较日期部分的另一种选择是HolidayDates.Any(d => d.Date == dateTime.Date)。或者,如果集合是 List<DateTime>,则对 List<T> 本身使用 Exists 方法而不是 LINQ。
      猜你喜欢
      • 2013-12-04
      • 2015-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2015-09-11
      相关资源
      最近更新 更多