У меня есть ситуация, когда я хочу добавить часы к дате и перенести новую дату на рабочий день. Я придумал функцию для определения этой новой даты, но хочу убедиться, что я ничего не забыл.
Добавляемые часы называются «задержкой». Вместо этого это может быть просто параметром функции.
Пожалуйста, оставляйте любые предложения. [VB.NET Предупреждение]
Private Function GetDateRequired() As Date
''// A decimal representation of the current hour
Dim hours As Decimal = Decimal.Parse(Date.Now.Hour) + (Decimal.Parse(Date.Now.Minute) / 60.0)
Dim delay As Decimal = 3.0 ''// delay in hours
Dim endOfDay As Decimal = 12.0 + 5.0 ''// end of day, in hours
Dim startOfDay As Decimal = 8.0 ''// start of day, in hours
Dim newHour As Integer
Dim newMinute As Integer
Dim dateRequired As Date = Now
Dim delta As Decimal = hours + delay
''// Wrap around to the next day, if necessary
If delta > endOfDay Then
delta = delta - endOfDay
dateRequired = dateRequired.AddDays(1)
newHour = Integer.Parse(Decimal.Truncate(delta))
newMinute = Integer.Parse(Decimal.Truncate((delta - newHour) * 60))
newHour = startOfDay + newHour
Else
newHour = Integer.Parse(Decimal.Truncate(delta))
newMinute = Integer.Parse(Decimal.Truncate((delta - newHour) * 60))
End If
dateRequired = New Date(dateRequired.Year, dateRequired.Month, dateRequired.Day, newHour, newMinute, 0)
Return dateRequired
End Sub
Примечание : Это, вероятно, не будет работать, если задержка превышает 9 часов. Оно никогда не должно меняться от 3 до.
EDIT:
Цель состоит в том, чтобы найти дату и время, которые вы получите в результате добавления нескольких часов к текущему времени. Это используется для определения значения по умолчанию для даты выполнения представления. Я хочу добавить 3 часа к текущему времени, чтобы получить время. Тем не менее, я не хочу сроки, которые выходят за рамки 17:00 текущего дня. Итак, я попытался разделить часы между (сегодня, до 17:00) и (завтра, с 8:00), чтобы добавление 3 часов к 16:00 дало бы вам 19:00, потому что 1 час добавлен к концу сегодняшнего дня и 2 часы добавляются к началу завтрашнего дня.