在vb.net中获取两个时间跨度之间的时差

时间:2013-09-19 12:49:13

标签: vb.net

我有两个变量:

Dim starttime As TimeSpan
Dim endtime As TimeSpan

我的开始时间值是:02:30:00(我的意思是凌晨2点30分)第二天凌晨2点30分

我的结束时间值是:10:3​​0:00(我的意思是10.30Am)

我希望得到这些时差。所以我有这样的代码:

Dim span3 As TimeSpan = starttime .Subtract(endtime ) 

现在我得到的是span3:08:00

这是错误的答案。其实我想要16:00:00。 (这是2.30Am到10.30 Am之间的确切差异)

我如何计算?

3 个答案:

答案 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)

你让DateTimeTimeSpan感到困惑。 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()