所以我将这个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
答案 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
这取代了上面的所有代码。