簡體   English   中英

在一天中迭代幾個小時

[英]Iterate through hours in a day

有一個DateTime變量,例如:

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

如何在今天的每個小時實現一個foreach循環?

就像是:

foreach (int myHour in testDate.Date)
{

}

但是這種方式不能編譯。

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

更多信息

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())
{
    ...
}

對於那些不喜歡普通老式for循環的人:):

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

下面的代碼允許您循環查看一天中的小時數,但也可以從特定小時開始。 如果您不需要支持從一小時偏移開始,這可能會更簡單。

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

foreach循環在列表中工作,但這里testDate.Date永遠不會給你一小時。 所以用它代替它用於循環或做while或while循環。

要獲得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個小時。

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

在一天中的所有24小時內迭代:

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

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

干脆就這么做

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

        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM