使用时间跨度和未来日期计算日期差异

时间:2010-11-12 20:08:47

标签: vb.net datetime datediff

我正在尝试根据日期列

按以下顺序标记网格中的行
  • 从今天开始2天或更长时间 然后RED
  • 当1天大,然后YELLOW
  • 0天后然后是GREEN
  • 当日期是将来的时候 BLUE

我有以下工作正常,除了将来的日期是绿色而不是蓝色。

 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 个答案:

答案 0 :(得分:2)

.Days总是给出一个Integer值,因此在你至少24小时后它才会起作用。您可以按照自己的建议解决问题,也可以立即使用Timespan差异进行解决。

您也可能想要考虑这种差异的含义。 2天是否意味着您要选择48小时前创建的元素,或者它是否意味着11月10日所有条目。

答案 1 :(得分:1)

我找到了解决方案。

我首先使用Date.Compare用IF包装我的CASE,首先检查日期是否在将来。

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

答案 2 :(得分:1)

我可能会建议另一种编写代码的方法:

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

正如我在最初的评论中所提到的,除非你将来至少24小时,否则Days将返回0。因此,如果是2010/08/15 12:30:00,您的未来日期是2010/08/16 0:30:00,则TimeSpan为-00:12:00:00等,天数为0。