3

VB.NET に、2 つの異なる期間が共通する合計時間を教えてくれる関数があるかどうか疑問に思っていました。

たとえば、次の 2 つの異なる期間があります。

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 分であることを教えてくれますか? (おそらく10進数) 夜の10:00PMまでと夜の11:30までは別の時間帯にあたるので1時間30分です。

概要:

特定の期間に夜勤の一部が何時間あるかを教えてくれる関数が必要なだけです。(つまり、午後 10 時から午前 6 時までです)。

4

4 に答える 4

2

TimeSpanこの機能は、次のクラスを介してすべての .Net 言語で利用できます。

例えば。:

result = (dt2 - dt1).TotalHours

2 つの日付を減算すると、TimeSpan が得られます。TimeSpan の TotalHours プロパティは、時間数またはその一部を示します。

ドキュメントをチェックしてください: http://msdn.microsoft.com/en-us/library/269ew577(v=vs.110).aspx

于 2013-05-20T02:30:13.910 に答える
1

Date1 と Date2 は最初の期間を表し、Date2 と Date3 は 2 番目の期間を表します。日付の順序が変更された場合は、最初の 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 を返します。また、ステートメントで2 つのDate変数を比較する場合、その部分は無視されます。IfTimeOfDay

        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)
于 2013-05-20T02:32:12.413 に答える