将日期时间更改为午夜。

3

我有一个名为 EffectiveDay 的内容,我想将日期时间更改为午夜。

public DateTime EffectiveDate { get; set; }

enter image description here

在截图中,显示的是2018年2月28日 上午5:00:00

我想把它改成2018年2月28日 午夜12:00:00

我尝试了以下方法,但没有成功。

ClassRoom.WorkOrders.Select(w => w.EffectiveDate).ToList().ForEach(s => s = s.Date);

我也尝试了以下方法,但并没有起作用。
ClassRoom.WorkOrders.Select(w => w.EffectiveDate).ToList().ForEach(s => s = GetDateZeroTime(s.Date));

public static DateTime GetDateZeroTime(DateTime date)
{
  return new DateTime(date.Year, date.Month, date.Day, 0, 0, 0);
}

截图显示的是午夜 12:00:00 AM。请注意,在 .NET 中,DateTime 总是带有时间组件。 - Peter B
请注意,特定的时间点是UTC午夜(请注意Kind为Utc),在您所在的时区是上午5点。 - Heretic Monkey
TimeOfDay 的值在哪里被设置的? - B Minster
1
因为OP试图通过在ForEach内调用s = GetDateZeroTime...将时间设置回w.EffectiveDate - Sergey Kalinichenko
1
你也可以使用DateTime的.Date属性来获得相同的结果,而不必使用你的方法。 - Hans Kesting
显示剩余2条评论
2个回答

4

使用 ToList 后进行分配并在之后使用 ForEach 不会有所帮助,因为您正在设置 s,它是在每次迭代后被丢弃的参数。

使用普通的 foreach 循环进行赋值:

foreach (var w in ClassRoom.WorkOrders) {
    w.EffectiveDate = w.EffectiveDate.Date;
    // w.EffectiveDate = GetDateZeroTime(w.EffectiveDate); would also work
}

2

通过将每个工作订单的EffectiveDate属性分配给一个没有任何时间知识的新DateTime对象,这应该有效地从所有工作订单中删除时间:

foreach (var workOrder in ClassRoom.WorkOrders)
    workOrder.EffectiveDate = new DateTime(workOrder.EffectiveDate.Year, workOrder.EffectiveDate.Month, workOrder.EffectiveDate.Day, 0, 0, 0);

在循环中设置workOrder.EffectiveDate = workOrder.EffectiveDate.Date也应该可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接