C# c语言中的DateTime循环#

C# c语言中的DateTime循环#,c#,datetime,C#,Datetime,可能周五的有点难以思考逻辑。也许这是一个简单的逻辑 我的问题是我有一个昨天的约会时间。我从7,8,9…23,0,1,2,3,6得到了小时值 DateTime yesterday_datetime = DateTime.Now.Date.AddDays(-1); DateTime todays_datetime = new DateTime(); 在小时循环中,我需要在下面的代码中添加hourvalue todays_datetime = yesterday_datetime.AddHo

可能周五的有点难以思考逻辑。也许这是一个简单的逻辑

我的问题是我有一个昨天的约会时间。我从7,8,9…23,0,1,2,3,6得到了小时值

DateTime yesterday_datetime = DateTime.Now.Date.AddDays(-1);    
DateTime todays_datetime = new DateTime();
在小时循环中,我需要在下面的代码中添加hourvalue

todays_datetime = yesterday_datetime.AddHours(hourValue);
但说到hourvalue 0,只考虑昨天的日期,而不是今天的日期

我将时间从7,8,9…23,0,1,2,3,4,5,6添加到2013年5月30日,因此如果将7添加到2013年5月30日,则将是2013年5月30日07:00:00,依此类推,直到2013年5月23日23:00:00。现在是0..6,应该是2013年5月31日00:00:00和2013年5月31日01:00:00,以此类推

我有什么遗漏吗?任何帮助都将不胜感激


干杯

我不确定您是否想要这个,但您可以尝试以下方式:

while (yesterday_datetime <= todays_datetime)
{
    // some logic

    yesterday_datetime = yesterday_datetime.AddHours(hourValue);
}

while(beday\u datetime我可能不完全理解这个问题:如果你有hourValue 0并将它们添加到昨天的datetime,那么这个值不会改变。对吗?

如果你这样做的话

var now = DateTime.Now
for (var time = now.AddDays(-1); time < now; time = time.AddHours(1))
{
    // time enumerates the hours between yesterday and now.
}

您需要更正小时值:

您现在的价值观:

7,8,9…23,0,1,2,3,6。

你的价值观应该是:

7,8,9…23,24,25,

否则,如果您调用“AddHours(0)”,它仍然是昨天的日期:

Console.WriteLine(
(yesterday_datetime.AddHours(0) == yesterday_datetime).ToString()
);
打印“真实”

todays_datetime = yesterday_datetime.AddHours(hourValue);
在您的代码中,您没有更新Dateyed\u datetime对象。即使添加了一些小时,它仍然指向前一天。您必须首先更新Datey\u datetime,将Dateyed\u datetime分配给todays\u datetime,然后使用today\u datetime进行进一步处理

DateTime yesterday_datetime = DateTime.Now.Date.AddDays(-1);    
DateTime todays_datetime = yesterday_datetime ;
todays_datetime = todays_datetime .AddHours(hourValue);

如果可能,您可以简单地使用:
小时值:7,8,9…23,24,25,26,27,28。

我想我开始明白了。试试这个:

for (Int32 i = -24; i <= 23; i++)
{
    DateTime dt = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.AddHours(i).Day, DateTime.Now.AddHours(i).Hour, DateTime.Now.AddHours(i).Minute, DateTime.Now.AddHours(i).Second);
    Console.writeLine(dt.ToString());
}

您是否可以添加一些示例输出以及您期望的信息。这样可以更容易地在此处找到问题。不确定是否正确,但
昨天\u datetime.AddHours(0)
实际上仍然是
昨天的日期时间
。不同意第一行+第一句。@自由职业者我不介意你是否希望今天是0小时,为什么不使用if语句,检查0并重置为24小时?那么你的AddHours将把日期推到今天。让我试试,然后回来,从问题判断,这是正确的t回答。我只是假设问题是错误的。然后todat_datetime将添加小时,如7+8=15,然后15+9=24,sonAddDays方法将时间值设置为零(小时、分钟、秒)。结果将只包含日期信息。
for (Int32 i = -24; i <= 23; i++)
{
    DateTime dt = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.AddHours(i).Day, DateTime.Now.AddHours(i).Hour, DateTime.Now.AddHours(i).Minute, DateTime.Now.AddHours(i).Second);
    Console.writeLine(dt.ToString());
}
5/30/2013 7:52:06 AM
5/30/2013 8:52:06 AM
5/30/2013 9:52:06 AM
5/30/2013 10:52:06 AM
5/30/2013 11:52:06 AM
5/30/2013 12:52:06 PM
5/30/2013 1:52:06 PM
5/30/2013 2:52:06 PM
5/30/2013 3:52:06 PM
5/30/2013 4:52:06 PM
5/30/2013 5:52:06 PM
5/30/2013 6:52:06 PM
5/30/2013 7:52:06 PM
5/30/2013 8:52:06 PM
5/30/2013 9:52:06 PM
5/30/2013 10:52:06 PM
5/30/2013 11:52:06 PM
5/30/2013 12:52:06 AM
5/30/2013 1:52:06 AM
5/30/2013 2:52:06 AM
5/30/2013 3:52:06 AM
5/30/2013 4:52:06 AM
5/30/2013 5:52:06 AM
5/30/2013 6:52:06 AM
5/31/2013 7:52:06 AM
5/31/2013 8:52:06 AM
5/31/2013 9:52:06 AM
5/31/2013 10:52:06 AM
5/31/2013 11:52:06 AM
5/31/2013 12:52:06 PM
5/31/2013 1:52:06 PM
5/31/2013 2:52:06 PM
5/31/2013 3:52:06 PM
5/31/2013 4:52:06 PM
5/31/2013 5:52:06 PM
5/31/2013 6:52:06 PM
5/31/2013 7:52:06 PM
5/31/2013 8:52:06 PM
5/31/2013 9:52:06 PM
5/31/2013 10:52:06 PM
5/31/2013 11:52:06 PM
5/31/2013 12:52:06 AM
5/31/2013 1:52:06 AM
5/31/2013 2:52:06 AM
5/31/2013 3:52:06 AM
5/31/2013 4:52:06 AM
5/31/2013 5:52:06 AM
5/31/2013 6:52:06 AM