Получить все время между двумя датами в данных интервалах - PullRequest
0 голосов
/ 29 марта 2019

Мне нужно получить указанное время с заданными интервалами за последние 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:27, даже если он все еще 9: 12.

Мне нужно, чтобы он возвращал значения, относящиеся к 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

1 Ответ

0 голосов
/ 01 апреля 2019

Немного более чистый вариант;

startdate = DateTime.Today.AddDays(-7)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...