-2

可能星期五有点难以思考逻辑。也许这可能是简单的逻辑。

我的问题是我有一个昨天的约会时间。我的 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 添加到 30/05/2013 所以如果 7 添加到 30/05/2013 那么它将是 30 /05/2013 07:00:00 等到 23 日是 30/05/2013 23:00:00。现在来到 0..6 它应该是 31/05/2013 00:00:00 和 31/05/2013 01:00:00 等等

我在这里错过了什么吗?任何帮助,将不胜感激。

干杯

4

7 回答 7

2

如果你做了类似的事情

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));
于 2013-05-31T11:43:26.403 回答
1

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

于 2013-05-31T11:41:09.013 回答
0

我不确定你是否想要这个,但你可以尝试类似的方法:

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

    yesterday_datetime = yesterday_datetime.AddHours(hourValue);
}

您将在 dateTime 中循环,直到yesterday_datetime获得相同的 datetime todays_datetime, hour by hourValue。你必须保证hourValue不是0。

于 2013-05-31T11:41:02.093 回答
0
todays_datetime = yesterday_datetime.AddHours(hourValue);

在您的代码中,您没有更新昨天的日期时间对象。即使您添加了几个小时,它仍然指向前一天。您必须首先更新昨天的日期时间,将昨天的日期时间分配给今天的日期时间,然后使用今天的日期时间进行进一步的处理。

DateTime yesterday_datetime = DateTime.Now.Date.AddDays(-1);    
DateTime todays_datetime = yesterday_datetime ;
todays_datetime = todays_datetime .AddHours(hourValue);
于 2013-05-31T11:47:34.460 回答
0

如果可能的话,您可以简单地使用:hourValue:7,8,9...23,24,25,26,27,28。

于 2013-05-31T11:47:43.593 回答
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()
);

打印“真”

于 2013-05-31T11:45:49.767 回答
0

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

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
于 2013-05-31T11:52:42.707 回答