9

我有两个变量:

Dim starttime As TimeSpan
Dim endtime As TimeSpan

我的开始时间值是:02:30:00(我的意思是 2.30AM)
2.30AM 是第二天

我的 endTime 值是:10:30:00(我的意思是 10.30Am)

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

Dim span3 As TimeSpan = starttime .Subtract(endtime ) 

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

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

我如何计算这个?

4

3 回答 3

14

您需要使用 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

于 2013-09-19T14:30:52.170 回答
3

你很困惑DateTimeTimeSpanTimeSpan存储持续时间,因此有关 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 小时。

于 2013-09-19T12:59:55.913 回答
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()
于 2014-05-22T08:05:39.670 回答