2011-01-14 84 views

回答

9

在C#

DateTime dt = DateTime.Today.AddHours(2); 
if (dt < DateTime.Now) 
    dt = dt.AddDays(1); 

我敢肯定有一个整洁的/聪明的方式,但会完成这项工作。

+0

谢谢downvoter。 – fearofawhackplanet 2011-01-14 14:05:18

1

如果当前时间在凌晨2:00之前,则下一个凌晨2:00将是今天凌晨2:00,明天(第1天)将会发生。

您可能想要使用日期时间对象并逐日递增,这应确保您始终处于正确的日期。

+0

你如何在.net中使用日期对象。 – 2011-01-14 13:56:30

+0

DateTime.AddDays – 2011-01-14 13:57:47

1
private DateTime GetTwoAm() 
    { 
     DateTime time1 = DateTime.Now; 
     DateTime time2 = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 2, 0, 0); 

     if (time1 <= time2) 
     { 
      return time2; 
     } 
     else 
     { 
      return time2.AddDays(1); 
     } 
    } 
0
DateTime dt = DateTime.Now; 
if (dt.Hour >= 2) 
    dt = dt.Date.Add(new TimeSpan(1, 2, 0, 0)); 
else 
    dt = dt.Date.Add(new TimeSpan(2, 0, 0)); 
1

每当使用日期处理使用内置的功能,因为你会错过的情况下。 1天

DateTime today2am = DateTime.Now.Date.AddHours(2); 
DateTime Nexttwoam = (DateTime.Now < today2am) ? (today2am) : today2am.AddDays(1); 
1

添加到今天,如果是02:00以后,否则加0天数:

DateTime.Today.AddDays(DateTime.Now.Hour >= 2 ? 1 : 0) 
0

我认为,包括添加小时至午夜或添加任何时间跨度超过一小时大任何回答由于夏令时,可能在某个时候注定要失败。

Dim dtToCheck As DateTime = "3/13/2011 00:12" 

    Dim tz As TimeZone = System.TimeZone.CurrentTimeZone 

    Dim dl As System.Globalization.DaylightTime = tz.GetDaylightChanges(dtToCheck.Year) 



    Dim dt As DateTime = Format(dtToCheck, "yyyy-MM-dd HH:00:00.000") 

    If dt < dtToCheck Then dt = dt.AddHours(1) 

    Do Until dt.Hour = 2 
     If dt < dl.Start And dt.AddHours(1) >= dl.Start Then 
      'will go over 
      dt = dt.Add(dl.Delta) 
     End If 
     dt = dt.AddHours(1) 
    Loop 

    TextBox2.Text = dt 

对于2011年3月13日午夜,下一个2:AM是3月14日,至少在我的时区。

相关问题