有一个DateTime变量,例如:
DateTime testDate = new DateTime(2011,12,15,00,00,00);
如何在今天的每个小时实现一个foreach循环?
类似的东西:
foreach (int myHour in testDate.Date)
{
}
但以这种方式不编译。
答案 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
}