在一天中迭代几个小时

Ciu*_*paz 4 c#

有一个DateTime变量,例如:

DateTime testDate = new DateTime(2011,12,15,00,00,00);
Run Code Online (Sandbox Code Playgroud)

如何在今天的每个小时实现一个foreach循环?

就像是:

foreach (int myHour in testDate.Date)
{

}
Run Code Online (Sandbox Code Playgroud)

但是这种方式不能编译.

dkn*_*ack 16

循环24并不是一个好主意,因为这在25或23小时(时间变化,夏令时......)的日子里不起作用.

使用AddHour功能和目标日期.

DateTime testDate = new DateTime(2011, 12, 15, 00, 00, 00, DateTimeKind.Local);
DateTime endDate = testDate.AddDays(1);

while (testDate.Date != endDate.Date)
{
    Console.WriteLine(testDate.ToString());
    testDate = testDate.AddHours(1);
}
Run Code Online (Sandbox Code Playgroud)

更多信息

  • +1,即使每天有23或25小时因DST而工作 (3认同)
  • "这不适用于25或23小时的日子" - 这是无稽之谈.DateTime.AddHours不考虑夏令时. (2认同)

Tho*_*que 6

for改为使用:

DateTime date = new DateTime(2011,12,15);
for(int i = 0; i < 24; i++)
{
    DateTime time = date.AddHours(i);
    ...
}
Run Code Online (Sandbox Code Playgroud)

如果你真的想使用foreach,你可以创建一个像这样的扩展方法:

static class DateTimeExtensions
{
    public static IEnumerable<DateTime> GetHours(this DateTime date)
    {
        date = date.Date; // truncate hours
        for(int i = 0; i < 24; i++)
        {
            yield return date.AddHours(i);
        }
    }
}

...

DateTime date = new DateTime(2011,12,15);
foreach (DateTime time in date.GetHours())
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 贾斯汀在另一个答案中买了一个非常好的观点.并非所有日子都有24小时! (2认同)