VB.net获取两次时间跨度之间的总时间

时间:2013-05-19 21:32:29

标签: vb.net timespan

我想知道VB.NET是否有一个功能可以告诉我两个不同时间跨度的共同时间。

例如,我有两个不同的时间跨度:

1st Date : (2013-01-01 8:30 AM) - (2013-01-01 11:30PM)
2nd Date : (2013-01-01 10:00 PM) - (2013-01-02 6:00 AM)

VB.NET可以告诉我答案是1小时30分钟吗? (也许是十进制) 这是1小时30分钟,因为晚上10点到晚上11点30分是另一个时间段。

要点:

我只需要一个功能,它会告诉我在某个时间段内有多少小时是夜班的一部分。 (那是晚上10点到早上6点)。

4 个答案:

答案 0 :(得分:2)

此功能可通过TimeSpan类:

用于所有.Net语言

例如:

result = (dt2 - dt1).TotalHours

当你减去两个日期时,你会得到一个TimeSpan。 TimeSpan的TotalHours属性为您提供小时数或其中的一部分。

查看文档:{​​{3}}

答案 1 :(得分:1)

编辑: 对不起,我误解了你的问题。我认为这就是你要找的东西。

这是你的DateRange类:

Public Class DateRange
   Public Property StartTime As DateTime
   Public Property EndTime As DateTime
   Public ReadOnly Property NumberOfHours As Decimal
       Get
           Dim result As Double
           result += (EndTime - StartTime).Hours
           result += (EndTime - StartTime).Minutes / 60
           result += (EndTime - StartTime).Seconds / 3600
           Return result
       End Get
   End Property
End Class

这将是链接中的C#函数,用VB重写:

Private Function GetIntersectionRange(range1 As DateRange, range2 As DateRange) As DateRange
    Dim iRange As New DateRange()
    iRange.StartTime = If(range1.StartTime < range2.StartTime, range2.StartTime, range1.StartTime)
    iRange.EndTime = If(range1.EndTime < range2.EndTime, range1.EndTime, range2.EndTime)

    If iRange.StartTime > iRange.EndTime Then iRange = Nothing
    Return iRange
End Function

以下是一小段代码,用于执行您提出的计算并将答案写入控制台:

Dim firstDate As New DateRange With {.StartTime = New DateTime(2013, 1, 1, 8, 30, 0), .EndTime = New DateTime(2013, 1, 1, 23, 30, 0)}
Dim secondDate As New DateRange With {.StartTime = New DateTime(2013, 1, 1, 22, 0, 0), .EndTime = New DateTime(2013, 1, 2, 6, 0, 0)}

Dim result As DateRange = GetIntersectionRange(firstDate, secondDate)
Console.WriteLine(result.NumberOfHours)

答案 2 :(得分:1)

Date1和Date2表示第一个时间跨度,Date2和Date3表示第二个时间跨度。如果更改日期的顺序,则必须为第一个if定义一个类似的else。

    Dim date1 As Date = #1/1/2013 8:30:00 AM#
    Dim date2 As Date = #1/1/2013 11:30:00 PM#
    Dim date3 As Date = #1/1/2013 10:00:00 PM#
    Dim date4 As Date = #1/2/2013 6:00:00 AM#
    Dim timePeriod As TimeSpan

    If date3.Date >= date1.Date And date3.Date <= date2.Date Then
        If date4.Date <= date2.Date Then
            timePeriod = date4.TimeOfDay - date3.TimeOfDay
        Else
            timePeriod = date2.TimeOfDay - date3.TimeOfDay
        End If
    End If
    Msgbox(timePeriod.ToString)

EDIt:只需timePeriod = date4- date3即可将差异转换为时间跨度

编辑2:即使没有共同的时间跨度,上面的代码也会返回date2-date3。在这种情况下,下面的代码将返回0。另外,在比较Date语句中的两个If变量时,TimeOfDay部分会被忽略。

        Dim date1 As Date = #1/1/2013 8:30:00 AM#
        Dim date2 As Date = #1/1/2013 11:30:00 PM#
        Dim date3 As Date = #1/1/2013 10:00:00 PM#
        Dim date4 As Date = #1/2/2013 6:00:00 AM#
        Dim timePeriod As TimeSpan
        If date3 >= date1 And date3 <= date2 Then
            If date4 <= date2 Then
                timePeriod = date4 - date3                  
            ElseIf date3 < date2 Then                   
                timePeriod = date2 - date3
            ElseIf date3.Date = date2.Date Then                    
                If date3.TimeOfDay < date2.TimeOfDay Then                        
                    timePeriod = date2 - date3
                Else
                timePeriod = TimeSpan.FromDays(0)
                End If
            Else
                timePeriod = TimeSpan.FromDays(0)
            End If
        End If
        MsgBox(timePeriod.ToString)

答案 3 :(得分:0)

喜欢这个吗?

            Dim d1 As DateTime = "1/22/2018 8:30:00 AM"
            Dim d2 As DateTime = "1/29/2018 5:30:00 PM"
            Dim ts As TimeSpan = d2.Subtract(d1)
            MessageBox.Show("Total Hours are " & Convert.ToDouble(Math.Round(ts.TotalHours, 2)))

只是玩弄它