以给定的间隔获取两个日期之间的所有时间

问题描述 投票:0回答:1

我需要在过去7天内以给定的间隔获取指定的时间。目前我正在使用此代码:

 If startdate = Nothing Then
        startdate = Date.Now.AddDays(-7)
    End If
    If enddate = Nothing Then
        enddate = Date.Now
    End If

    Dim curstartdate As DateTime = startdate
    Dim curenddate As New DateTime


    While curenddate < DateTime.Now
        Select Case ComboBox1.SelectedItem
            Case "every 15 minutes"
                curenddate = curstartdate.AddMinutes(15)
            Case "every 30 minutes"
                curenddate = curstartdate.AddMinutes(30)
            Case "every hour"
                curenddate = curstartdate.AddHours(1)
            Case "every 2 hours"
                curenddate = curstartdate.AddHours(2)
            Case "every 3 hours"
                curenddate = curstartdate.AddHours(3)
            Case "every 6 hours"
                curenddate = curstartdate.AddHours(6)
            Case "every 12 hours"
                curenddate = curstartdate.AddHours(12)
            Case "every 24 hours"
                curenddate = curstartdate.AddHours(24)
        End Select

     ***DO SOME FANCY STUFF***
     curstartdate = curenddate
   end while

这是有效的,如果我运行这个广告例如9:12,间隔15分钟我得到最后几天的所有小时有分钟12,27,42,57 ......如果代码很慢(那由于外部因素而发生)即使它仍然是9:12,我也会从例如9:12到9:27获得最后一次阻止。

我需要它返回参考00小时(7天前的午夜)的值。所以00,15,30,45 ..并且最后一次应该被遗弃(所以没有时间块超越现在)

我怎么能这样做?


*编辑:我这样做了,这是解决问题的好方法吗? *

 If startdate = Nothing Then          
        startdate = New DateTime(Now.AddDays(-7).Year, Now.AddDays(-7).Month, Now.AddDays(-7).Day, 0, 0, 0)
    End If
    If enddate = Nothing Then
        enddate = Date.Now
    End If

    Dim curstartdate As DateTime = startdate
    Dim curenddate As New DateTime


    While curenddate < DateTime.Now
        Select Case ComboBox1.SelectedItem
            Case "every 15 minutes"
                curenddate = curstartdate.AddMinutes(15)
            Case "every 30 minutes"
                curenddate = curstartdate.AddMinutes(30)
            Case "every hour"
                curenddate = curstartdate.AddHours(1)
            Case "every 2 hours"
                curenddate = curstartdate.AddHours(2)
            Case "every 3 hours"
                curenddate = curstartdate.AddHours(3)
            Case "every 6 hours"
                curenddate = curstartdate.AddHours(6)
            Case "every 12 hours"
                curenddate = curstartdate.AddHours(12)
            Case "every 24 hours"
                curenddate = curstartdate.AddHours(24)
        End Select


          ***DO SOME FANCY STUFF***

  curstartdate = curenddate
end while
vb.net time intervals
1个回答
0
投票

稍微清洁的选择;

startdate = DateTime.Today.AddDays(-7)

https://docs.microsoft.com/en-us/dotnet/api/system.datetime.today?view=netframework-4.7.2

© www.soinside.com 2019 - 2024. All rights reserved.