我有两个变量:
Dim starttime As TimeSpan
Dim endtime As TimeSpan
我的开始时间值是:02:30:00(我的意思是凌晨2点30分)第二天凌晨2点30分
我的结束时间值是:10:30:00(我的意思是10.30Am)
我希望得到这些时差。所以我有这样的代码:
Dim span3 As TimeSpan = starttime .Subtract(endtime )
现在我得到的是span3:08:00
这是错误的答案。其实我想要16:00:00。 (这是2.30Am到10.30 Am之间的确切差异)
我如何计算?
答案 0 :(得分:11)
您需要使用DateTime变量来保存开始时间和结束时间。像这样:
Dim startTime As New DateTime(2013, 9, 19, 10, 30, 0) ' 10:30 AM today
Dim endTime As New DateTime(2013, 9, 20, 2, 0, 0) ' 2:00 AM tomorrow
Dim duration As TimeSpan = endTime - startTime 'Subtract start time from end time
Console.WriteLine(duration)
结果:
15:30:00
更新:
要将该结果转换为分钟,您可以使用TimeSpan变量的TotalMinutes属性:
Console.WriteLine(duration.TotalMinutes)
结果:
930
答案 1 :(得分:3)
你让DateTime
和TimeSpan
感到困惑。 TimeSpan
存储持续时间,因此有关AM和PM的任何信息都不相关。如果您想要进行两次比较,则应使用DateTime
并将它们两者相减,这将为您提供TimeSpan
。
你不能给TimeSpan一个'2am'的值,你应该使用DateTime
。
考虑:
var date1 = DateTime.Now.Date.AddHours(2); // pseudo code 2am
var date2 = DateTime.Now.Date.AddHours(11); // pseudo code 11am
var result = date2 - date1;
这里的结果将持续9个小时。
如果您希望第二天凌晨2点,则应包含AddDays(1);
var date1 = DateTime.Now.Date.AddDays(1).AddHours(2); // pseudo code 2am the next day
var date2 = DateTime.Now.Date.AddHours(11); // pseudo code 11am
var result = date1 - date2;
这里的结果将是15个小时。
答案 2 :(得分:1)
这是我在小时差异的解决方案
'WORKS ONLY TIME SPAN WITHIN 48 HRS
Dim HRS As TimeSpan
Dim St As TimeSpan = TimeSpan.Parse(L_A_START.Text)
Dim Cl As TimeSpan = TimeSpan.Parse(L_A_CLOSE.Text)
HRS = Cl - St
If HRS.Hours <= 0 Then
HRS = (HRS + New TimeSpan(0, 24, 0, 0, 0))
End If
L_A_HRS.Text = HRS.ToString()