c#中的DateTime循环

本文关键字:循环 DateTime 中的 | 更新日期: 2023-09-27 18:16:19

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

我的问题是我有昨天的约会时间。我的hourValue是7,8,9…23,0,1,2,3,6。

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

在Hours循环中,我需要在下面的代码中添加hourvalue。

todays_datetime = yesterday_datetime.AddHours(hourValue);

但当谈到小时值0时,它只取昨天的日期,而不是今天的日期。

我添加了从7、8、9…23、0、1、2、3、4、5、6到2013年5月30日的小时数,所以如果将7添加到2013年05月30日,那么它将是2013年05日07时00分,以此类推,直到23日,它是2013年5日30时00分。现在是0..6,应该是2013年5月31日00:00:00和2013年5日31日01:00:00,依此类推

我是不是遗漏了什么?如有任何帮助,我们将不胜感激。

干杯

c#中的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.
}

它应该很好用。


或者,如果你不喜欢循环,

var yesterday = DateTime.Now.AddDays(-1);
var hourTimes = Enumerable.Range(0, 24)
    .Select(hourValue => yesterday.Add(hourValue));

我可能没有完全理解这个问题:如果你有hourValue 0并将其添加到昨天的日期时间中,那么这个值不会改变。正确的

我不确定你是否想要这个,但你可以试试这样的东西:

while (yesterday_datetime <= todays_datetime)
{
    // some logic
    yesterday_datetime = yesterday_datetime.AddHours(hourValue);
}

您将在dateTime中循环,直到yesterday_datetime获得与todays_datetime相同的日期时间,即hourValue的小时。您必须确认hourValue不是0。

您需要更正您的小时值:

您现在的价值观:

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

打印"True">

todays_datetime = yesterday_datetime.AddHours(hourValue);

在您的代码中,您没有更新yesterday_datetime对象。即使添加了几个小时,它仍然指向前一天。您必须首先更新yesterday_datetime,将yesterday_datetime分配给todays_datetime,然后使用today_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());
}

现在,在美国东部时间我得到:

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