在我的时间跨度代码

时间:2016-11-08 00:05:15

标签: vb.net datetime

我的代码如下:

    Private Sub tbRcvrDepartTime_textchanged(sender As Object, e As EventArgs) Handles tbRcvrDepartTime.TextChanged

    'Converts the 90 Receiver Arrival & Departures Date & Times to a string for comparison
    Dim raTime As String = tbRcvrArriveTime.Text            'Takes the Time only String and converts to string
    Dim raDate As String = dpRcvrArriveDate.Text            'Takes the DateTimePicker and converts date to string
    Dim raDateString = String.Concat(raDate, " ", raTime)   'Puts together the Date & Time into one continuous string
    'Dim raDateFormat As String = "MM-dd-yyyy HH:mm"         'Sets the String to Date style Format
    Dim raResultDate As Date = CDate(raDateString)          'Finalizes the String for use in below comparison

    Dim rdTime As String = tbRcvrDepartTime.Text            'Takes the Time only String and converts to string
    Dim rdDate As String = dpRcvrDepartDate.Text            'Takes the DateTimePicker and converts date to string
    Dim rdDateString = String.Concat(rdDate, " ", rdTime)   'Puts together the Date & Time into one continuous string
    'Dim rdDateFormat As String = "MM-dd-yyyy HH:mm"         'Sets the String to Date Format
    Dim rdResultDate As Date = CDate(rdDateString)          'Finalizes the String for use in below comparison

    'Checks to see if 2 or more hours have elapsed since Receiver Arrival/Departure Date & Time
    Dim elapsedR As TimeSpan = rdResultDate.Subtract(raResultDate)
    tbRcvrDepartTime.BackColor = If(elapsedR.TotalMinutes > 120, Color.LightPink, Color.White)
End Sub

raTime& rdTime是单独的文本框。 raDate和amp; rdDate是datetimepickers。

当我运行代码&#34; live&#34;最初,我看到的第一条记录是正确显示的。一旦我移动到另一个记录,这就会消失...我得到随机结果,如果> 120分钟过去,它将不会将背景颜色更改为正确的颜色。其他时候,当经过<120分钟时,它会改变背景颜色。有时候背景颜色应该没有变化,否则它会改变颜色。我尝试使用TotalHours最初这样做,但遇到了相同的结果。它是随机的,并不一致。我已经为此工作了2天,但结果没有差异。我的想法是需要一种方法来刷新&#34; rdResultDate&amp;加载每个新记录时的raResultDate信息,但我无法用我的代码知识做到这一点。

代码必须能够考虑是否存在新日期 - 即raDate:11/01/2016和raTime:23:46 rdDate:11/02/2016和rdTime:03:00 - 这将超过2小时(或120分钟),应该阅读&#34; True&#34;并且在超过2小时(或120分钟)时更改背景颜色。

但如果以下情况属实: raDate:11/01/2016和raTime:23:46和
rdDate:11/02/2016和rdTime:01:00这不会超过2小时(或120分钟),应阅读&#34; False&#34;并且不会改变背景颜色。

1 个答案:

答案 0 :(得分:0)

所有这些代码:

Dim Detention90 As String

Try
    If elapsedR.TotalMinutes > 120 Then
        Detention90 = "True"
    Else
        Detention90 = "False"
    End If

    Select Case Detention90.ToString
        Case = "True" : tbRcvrDepartTime.BackColor = Color.LightPink
        Case Else : tbRcvrDepartTime.BackColor = Color.White
    End Select

Catch ex As Exception
    'If a problem occurs, show Error message box
    MessageBox.Show("Receiver Arrive Time & Depart Time Elapsed error" & vbCrLf & "Lines 1424-1434")
End Try

简化为:

Dim elapsedR As TimeSpan = rdResultDate.Subtract(raResultDate)
tbRcvrDepartTime.BackColor = If(elapsedR.TotalMinutes > 120, Color.LightPink, Color.White) 

不确定它是否会直接解决您的问题,但对于评论来说有点太多了,我发现以这种方式压缩代码通常对于追踪困难的错误非常有用。

但在这种情况下,我怀疑主要问题是解析日期时间值...您并不总是解析您希望从给定输入字符串中的DateTime值。具体来说,您有格式字符串变量raDateFormatrdDateFormat,但随后调用Date.Parse()以便这些格式变量从不使用,您将受到怜悯无论您的线程,进程或系统的默认日期格式是什么。如果你的系统使用英国的d / m / y订单而不是美式m / d / y,你最终会得到一些奇怪的结果。您可能需要DateTime.ParseExact()