2012-12-13 22 views
1

我有2列,一个用于开始时间,另一个用于结束时间。他们都是nvarchar类型,所以我可以比较他们。在ASP/VB中比较时间

我有一个文本框,将从用户接收时间,并将自动回发检查时间是否有效。

Dim compared_time_1 As DateTime 
    Dim compared_time_2 As DateTime 

    Dim select_time As SqlCommand 
    select_time = New SqlCommand("select Start_Time , End_Time from Clinic_Schedule where Schedule_no = @sch_no", appt_DB_1) 
    select_time.Parameters.AddWithValue("@sch_no", Sch_no) 

    Dim time_rdr As SqlDataReader 
    time_rdr = select_time.ExecuteReader() 

    While time_rdr.Read 
     compared_time_1 = DateTime.Parse(start_time_1) 
     compared_time_2 = DateTime.Parse(end_time_1) 
     start_time_1 = time_rdr(0).ToString 
     end_time_1 = time_rdr(1).ToString 




     If appt_time_txt0.Text >= start_time_1 And appt_time_txt0.Text <= end_time_1 Then 
      date_valid_lbl0.Visible = True 
      date_valid_lbl0.Text = "*Valid Time" 

     Else 
      time_valid_lbl0.Visible = True 
      time_valid_lbl0.Text = "*Not Valid Time" 
     End If 


    End While 
    time_rdr.Close() 

我不知道我的逻辑XD是否有问题。 填写放入系统列中的数据都是这种格式:00:00AM or 00:00PM. 我会感谢您的帮助..感谢

+0

为什么您没有将Start_Time和End_Time作为日期存储在Clinic_Schedule中的任何原因?你使用了哪个后端数据库? –

+0

你想在这些行中做什么..? compare_time_1 = DateTime.Parse(start_time_1) Comparison_time_2 = DateTime.Parse(end_time_1) start_time_1 = time_rdr(0).ToString end_time_1 = time_rdr(1).ToString' –

+0

你为什么说这是ASP? –

回答

0

好像你是比较反对的日期数据类型的字符串。

确保您将两者都转换为日期数据类型,如下所示。 请注意秒和'AM'之间的距离。

time1=CDate("3:19:40 AM") 
time2=CDate("3:10:40 AM") 

然后执行comparisms如下:

if time1>time2 then 
    'logic 
end if 
+0

当然,如果这是asp,那就是了 –

0

它看起来像你从你的读者在加载数据之前做了解析。

compared_time_1 = DateTime.Parse(start_time_1) 
compared_time_2 = DateTime.Parse(end_time_1) 
start_time_1 = time_rdr(0).ToString 
end_time_1 = time_rdr(1).ToString 

应该

start_time_1 = time_rdr(0).ToString 
end_time_1 = time_rdr(1).ToString 
compared_time_1 = DateTime.Parse(start_time_1) 
compared_time_2 = DateTime.Parse(end_time_1) 

但我甚至会采取不同的方式比。如果您试图确定时间是否有效,则可以使用datetime TryParse方法。也许一些重构也可能对你有所帮助。最后,请注意,如果计划项目有可能在午夜之前开始并在第二天午夜之后结束,则比较时间可能会产生问题。

Sub ReadingData() 

    'initializing reader stuff here... 

    Dim dtStart As DateTime, dtEnd As DateTime 
    If DateTime.TryParse(time_rdr(0).ToString, dtStart) = False Then 
     HandleInvalidTime() 
    End If 

    If DateTime.TryParse(time_rdr(1).ToString, dtEnd) = False Then 
     HandleInvalidTime() 
    End If 

    'Closing out reader stuff here... 

    HandleValidTime(dtStart, dtEnd) 

End Sub 

Sub HandleValidTime(TheStartTime As DateTime, TheEndTime As DateTime) 
    'Do Stuff 
End Sub 

Sub HandleInvalidTime() 
    'Do Stuff 
End Sub