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