如何在vb.net中比较/计算时间值?

时间:2014-03-10 09:40:19

标签: vb.net

所以我将这个datetimepicker格式化为选择/仅显示时间值。如果我在特定时间之前选择一个时间,比如说,下午6点,标签应该说“Undertime”,否则应该说“Overtime”。我还想找到所选时间和下午6点之间的时差。

我已经尝试过这些代码,但没有像我想的那样工作:

If tp.Value > #6:00:00 PM# Then

Label1.Text = "Overtime: " & (tp.Value - #6:00:00 PM#).ToString

Else

Label1.Text = "Undertime: " & (#6:00:00 PM# - tp.Value).ToString

 End If 

1 个答案:

答案 0 :(得分:0)

使用TimeSpan代替DateTime。问题是,您的Date的时间部分为18,这是正确的,但date部分的年份为0(因为您的Date字面值不包含日期部分,因此已初始化使用默认日期),该日期始终低于DateTimePicker的{​​{1}}。

因此请使用Date并将其与TimeSpan进行比较,DateTime.TimeOfDay也是TimeSpan

Dim time = TimeSpan.FromHours(18)
If tp.Value.TimeOfDay > time Then
    Label1.Text = "Overtime: " & (tp.Value.TimeOfDay - time).ToString
Else
    Label1.Text = "Undertime: " & (tp.Value.TimeOfDay - time).ToString
End If

时间跨度没有AM / PM指定,因为它总是24小时。如果您想使用hh:mm - 格式正确格式化,可以使用TimeSpan.ToString

Dim diff As TimeSpan = tp.Value.TimeOfDay - time
Dim msg = String.Format("{0}: {1}",
   If(diff > TimeSpan.Zero, "Overtime", "Undertime"),
   diff.ToString("hh\:mm"))
Label1.Text = msg

这取代了上面的所有代码。