繁体   English   中英

如何在.net中找到下一个凌晨2点的确切日期

[英]How to find the exact date of the next 2:00 am in .net

我需要获取一个日期对象,该对象指定将要到来的下一个凌晨2:00。

假设时间是15日14:00,我需要日期对象包含16日2:00如果时间是16日1:00,我需要日期对象包含16日2:00

我该怎么做呢?

在C#中

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

我确信有一个更整洁/更聪明的方式,但这将完成工作。

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

您可能希望使用日期时间对象并将日期递增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);
        }
    }

每当处理日期时都使用内置函数,因为你会错过一个案例。

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

如果在02:00之后添加一天到今天,否则添加0天:

DateTime.Today.AddDays(DateTime.Now.Hour >= 2 ? 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));

我认为任何答案都包括在午夜时间增加小时或增加任何大于一小时的时间跨度,这可能注定会因夏令时而失败。

    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日,至少在我的时区。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM