我只想要两个值之间的时差,当我跨越12个小时时,它会给出错误的值。
ex:早上6:00并选择7:00 PM然后将结果显示为660分钟而不是780分钟。 它可以工作,直到我选择12小时范围之间的时间。
请帮我解决这个问题。
Dim sDateStart As DateTime = Convert.ToDateTime(CType(cboStartHours.SelectedItem, ListItem).ItemText & ":" _
& CType(cboStartMins.SelectedItem, ListItem).ItemText & ":00 " _
& CType(cboStartAMPM.SelectedItem, ListItem).ItemText)
Dim sDateEnd As DateTime = Convert.ToDateTime(CType(cboEndHours.SelectedItem, ListItem).ItemText & ":" _
& CType(cboEndMins.SelectedItem, ListItem).ItemText & ":00 " _
& CType(cboEndAMPM.SelectedItem, ListItem).ItemText)
Dim TS As TimeSpan = sDateEnd - sDateStart
Console.WriteLine(TS.Duration.TotalMinutes)
谢谢
答案 0 :(得分:4)
也试试这个。在VB.Net中,有一种方法可以直接用于获取年/月/季度/天/小时/分钟/秒中两个日期值之间的差异。
Dim iMin As Long = DateDiff(DateInterval.Minute, sDateStart, sDateEnd)
您可以在msdn
上找到完整的参考和示例在C#中
DateTime sDateStart = New DateTime(2014,07,06,18,0,0); //06-Jul-2014 06:00PM
DateTime sDateEnd = New DateTime(2014,08,08,7,0,0); //08-Aug-2014 07:00AM
TimeSpan ts = sDateEnd - sDateStart;
int iMin = ts.TotalMinutes; //Result of ts.TotalMinutes: 46860.0F
答案 1 :(得分:3)
如果您只想要两个DateTime
值之间的时差,则可以使用DateTime.TimeOfDay
忽略日期部分,TimesSpan
会返回var diff = sDateEnd.TimeOfDay - sDateStart.TimeOfDay;
。
所以你得到了这样的差异:
DateTime date1 = new DateTime(2014, 01, 01, 16, 0, 0); // In the afternoon of day 1.
DateTime date2 = new DateTime(2014, 01, 02, 09, 0, 0); // In the morning of day 2.
var diff = date2.TimeOfDay - date1.TimeOfDay;
if (diff.TotalSeconds < 0)
diff = diff + TimeSpan.FromDays(1);
Console.WriteLine(diff.TotalHours); // Prints 17
如果差异是负数,则需要添加24小时(例如,如果开始日期的时间为16:00,结束的时间为09:00,则会得到-07的差异: 00.当您向其添加24小时后,您将得到17:00的正确结果。
例如:
DateTime
如果您的var diff2 = (date2 - date1); // Much simpler, but needs DateTime values less than a day apart.
值保证不到24小时,您可以随时执行此操作:
{{1}}
但有一个重要的问题:如果DateTime值超过24小时,您想要做什么?在这种情况下产生小于24小时的答案意味着什么?