在一天中迭代几个小时

时间:2011-12-15 14:24:03

标签: c#

有一个DateTime变量,例如:

DateTime testDate = new DateTime(2011,12,15,00,00,00);

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

类似的东西:

foreach (int myHour in testDate.Date)
{

}

但以这种方式不编译。

9 个答案:

答案 0 :(得分:14)

循环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);
}

更多信息

答案 1 :(得分:6)

改为使用for

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

如果确实想要使用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())
{
    ...
}

答案 2 :(得分:1)

对于那些不喜欢普通老式for循环的人:):

DateTime testDate = new DateTime(2011,12,15,00,00,00);
foreach (int hour in Enumerable.Range(0,24)) {
    DateTime dateWithHour = testDate.AddHours(hour);
}

答案 3 :(得分:1)

以下代码允许您循环查看当天的小时数,但也可以从特定小时开始。如果您不需要从一小时的偏移量开始支持,那可能会更简单。

DateTime testDate = new DateTime(2011,12,15,13,00,00);
var hoursLeft = 24 - testDate.Hour;

for (var hour = 1; hour < hoursLeft; hour++)
{
    var nextDate = testDate.AddHours(hour);
    Console.WriteLine(nextDate);
}

答案 4 :(得分:1)

foreach循环在列表中工作,但这里testDate.Date从不给你一小时。所以用它代替循环或者循环或循环。

答案 5 :(得分:0)

在一天中的所有24小时内迭代:

DateTime testDate = new DateTime(2011, 12, 15);

for (int i = 0; i < 24; i++)
{
    DateTime hour = testDate.Date.AddHours(i);
    // Your code here
}

答案 6 :(得分:0)

要在DLS时间内获得时间,请使用此功能:

DateTime testDate = new DateTime(2017, 03, 26, 00, 00, 00, DateTimeKind.Local);
DateTime endDate = testDate.AddDays(1);

//these dates also contain time!
var start = TimeZone.CurrentTimeZone.GetDaylightChanges(testDate.Year).Start; 
var end = TimeZone.CurrentTimeZone.GetDaylightChanges(testDate.Year).End;

var hoursInDay = new List<DateTime>();

while (testDate.Date != endDate.Date)
{
    if (start == testDate)
    {
        //this day have 23 hours, and should skip this hour.
        testDate = testDate.AddHours(1);
        continue; 
    }

    hoursInDay.Add(testDate);

    if (end == testDate)
    {
        hoursInDay.Add(testDate); //this day has 25 hours. add this extra hour
    }

    testDate = testDate.AddHours(1);
}

我在丹麦,所以当我跑这个时间只有23个小时。

答案 7 :(得分:0)

DateTime today = DateTime.Today;
DateTime tomorrow = today.AddDays(1);
for ( var i = today; i <= tomorrow; i = i.AddHours(1))
{
    // your code
}

答案 8 :(得分:-1)

只需这样做

DateTime testDate = new DateTime(2011, 12, 15, 10, 00, 00);
        for (int i = testDate.Hour; i < 24; i++)
        {
            //do what ever

        }