下一个凌晨3点发生的日期时间

Ale*_*lex 16 c# datetime

我确信这很容易,但我有一个突然的精神障碍.
我正在尝试为下一次出现的凌晨3点获取一个DateTime对象.例如,如果DateTime.Now16/july/2009 : 12:04pm- 下一次出现凌晨3点17/july/2009 : 03:00

但是,如果DateTime.Now是,17/july/2009 : 01:00那么下一次出现17/july/2009 : 03:00的时间仍然是(不是后一天).
那有意义吗?

Jon*_*eet 29

一种选择:

DateTime now = DateTime.Now;
DateTime today3am = now.Date.AddHours(3);
DateTime next3am = now <= today3am ? today3am : today3am.AddDays(1);
Run Code Online (Sandbox Code Playgroud)

另一个:

DateTime now = DateTime.Now;
DateTime today = now.Date;
DateTime next3am = today.AddHours(3).AddDays(now.Hour >= 3 ? 1 : 0)
Run Code Online (Sandbox Code Playgroud)

很多皮肤特殊猫的方式:)

这当然是在当地时间,这意味着您不必担心时区.如果你想要涉及时区,生活变得更加棘手......

请注意,如果在计算时日期翻过来,最好采取DateTime.Now 一次避免问题...

  • `DateTime today3am = DateTime.Today.AddHours(3);` (7认同)
  • @Clement H:什么lambda表达式? (4认同)

Luk*_*keH 5

DateTime now = DateTime.Now;
DateTime threeAM = now.Date.AddHours(3);

if (threeAM < now)
    threeAM = threeAM.AddDays(1);
Run Code Online (Sandbox Code Playgroud)