【问题标题】:List with dates, addHours to list linq列出日期,添加小时以列出 linq
【发布时间】:2014-06-24 08:41:39
【问题描述】:

我有一个带有日期的列表,可以在网格中显示它,我想在 range2 中增加一小时

private void grid_loaded(object sender, RoutedEventArgs e)
{
    var data = new List<EntityViewModel> 
    {
        new EntityViewModel { aDay = new DateTime(1980, 1, 1, 12, 0, 12) },
        new EntityViewModel { aDay = new DateTime(1983, 1, 1, 12, 23, 12) },
        new EntityViewModel { aDay = new DateTime(1985, 6, 14, 12, 0, 12) },
        new EntityViewModel { aDay = new DateTime(1990, 7, 3, 12, 23, 12) },
        new EntityViewModel { aDay = new DateTime(1995, 8, 1, 4,  23, 12) },
        new EntityViewModel { aDay = new DateTime(1996, 1, 1, 12, 0, 12) },
        new EntityViewModel { aDay = new DateTime(2000, 1, 1, 12, 0, 12) },
        new EntityViewModel { aDay = DateTime.Now }
    };

    var range = data.Where(i => i.aDay.Year >= 1983 && i.aDay.Year <= 1996).ToList();
    var range2 = range.Where(i => i.aDay.Date.IsDaylightSavingTime() == true).ToList();
}

我试过了:

var range3 = range.Where(i => i.aDay.Date.IsDaylightSavingTime() == true).ToList();
range3.ForEach(i => i.aDay.AddHours(1));

这个:

foreach (var item in range2.Where(x => x.aDay != null))
{
    item.aDay.AddHours(1);
}

还有这个:

var range5 = range2.Where(i => i.aDay != null).Select(i => { i.aDay.AddHours(1); return i; }).ToList();

但它什么也没做,总是相同的时间。

【问题讨论】:

  • 鉴于您的代码,我会说为夏令时增加一小时是错误的做法,请查看ToUniversalTime(),看看它是否符合您的要求。如果没有,请同时查看DateTimeOffset,正常的DateTime 不是用来处理偏移的。 IsDaylightSavingTime() 的作用:指示此 DateTime 实例是否在当前时区的夏令时范围内。 IE,即使你添加一个小时,它仍然会声明它是夏令时。

标签: c# linq list datetime entity


【解决方案1】:

AddHours 不会更改初始日期,而是返回一个新日期。
您需要选择这些日期:

var range5 = range2.Where(i => i.aDay != null).Select(i => i.aDay.AddHours(1));

获取更改的日期或

range3.ForEach(i => i.aDay = i.aDay.AddHours(1));

更改列表中项目的日期。

【讨论】:

  • 如果我想拿走价值?
  • 如果要减去一个小时:i.aDay.AddHours(-1)
【解决方案2】:

DateTime 是一个结构,所以你必须这样做: var date = DateTime.Now; date = date.AddHours(1);

在你的情况下: range3.ForEach(i =&gt; i.aDay = i.aDay.AddHours(1));

【讨论】:

    【解决方案3】:

    AddHours 返回一个新的 DateTime,它不会改变当前实例。 http://msdn.microsoft.com/en-us/library/system.datetime.addhours.aspx

    for (int i = 0; i < range2.Count; ++i) {
        range2[i].aDay = range2[i].aDay.AddHours(1);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      • 2013-05-02
      相关资源
      最近更新 更多