Вычисление разницы дат с указанием времени и будущих дат - PullRequest
0 голосов
/ 12 ноября 2010

Я пытаюсь пометить строки в сетке в следующем порядке на основе столбца даты

  • Когда 2 или более дней с сегодняшнего дня тогда КРАСНЫЙ
  • Когда 1 день, тогда ЖЕЛТЫЙ
  • Когда 0 дней, тогда ЗЕЛЕНЫЙ
  • Когда дата в будущем, то СИНИЙ

У меня есть следующее, которое работает нормально, за исключением будущих дат, которые ЗЕЛЕНЫЙ, а не СИНИЙ.

 Dim myDate As DateTime = CType(grdSummaryView.GetRowCellValue(e.RowHandle, "myDate"), DateTime)

 Select Case Now.Subtract(myDate).Days
                '2 or more days old then RED FLAG
                Case Is >= 2
                    e.Value = ImageCollection2.Images(3)
                Case 1
                '1 day old then YELLOW FLAG
                    e.Value = ImageCollection2.Images(1)
                Case 0
                'Current day then GREEN FLAG
                    e.Value = ImageCollection2.Images(0)
                Case Else
                    e.Value = ImageCollection2.Images(4)
 End Select

Ответы [ 3 ]

2 голосов
/ 12 ноября 2010

.Days всегда дает целочисленное значение, поэтому оно не будет работать до тех пор, пока вы не проработаете как минимум 24 часа.Вы можете решить ее так, как предлагали сами, или сразу поработать с разницей во времени.

Возможно, вы захотите рассмотреть значение этой разницы.Означает ли 2 дня, что вы хотите выбрать элементы, которые были созданы 48 часов назад, или это означает все записи, сделанные, например, 10 ноября.

1 голос
/ 12 ноября 2010

Я мог бы предложить альтернативный способ написания кода:

Dim age As Double = Now.Substract(myDate).TotalDays

If age >= 2 Then
  e.Value = ImageCollection2.Images(3) //Red
ElseIf age >= 1 Then
  e.Value = ImageCollection2.Images(1) //Yellow
ElseIf age >= 0 Then
  e.Value = ImageCollection2.Images(0) //Green
Else
  e.Value = ImageCollection2.Images(4) //Blue
End If

Как упоминалось в моих первоначальных комментариях, Days вернет 0, если в будущем у вас не будет 24 часа. Так, если это 2010/08/15 12:30:00, а ваша будущая дата 2010/08/16 0:30:00, то TimeSpan будет -00: 12: 00: 00 и т. Д., А Дни будут 0.

1 голос
/ 12 ноября 2010

Я нашел решение.

Сначала я обертываю свой CASE IF, используя Date.Compare, чтобы сначала проверить, будет ли дата в будущем.

If Date.Compare(myDate, Now) < 0 Then
                Select Case Now.Subtract(delivDate).Days

                    Case Is >= 2
                        '2 or more days old then RED FLAG
                        e.Value = ImageCollection2.Images(3)
                    Case 1
                        '1 day old then YELLOW FLAG
                        e.Value = ImageCollection2.Images(1)
                    Case Else
                        '0 day (current day) then GREEN FLAG
                        e.Value = ImageCollection2.Images(0)
                End Select
            Else
                'DATE IS IN THE FUTURE
                e.Value = ImageCollection2.Images(4)
            End If
...