2010-08-10 204 views
3

我需要以小時爲單位計算從創建記錄到當前時間已經過去了多少時間。困難的部分是我需要排除週末時間。計算從日期到當前日期的小時數(不包括週末)

我一直在這個工作了很長一段時間,我只是迷路了。這是我到目前爲止。預先感謝您的幫助。

Dim MyStartTime As DateTime = "2010-08-09 07:00:00.000" 
    Dim MyEndTime As DateTime = DateAdd("h", -1, Now()) 

    Dim MyHours As Integer = 0 

    If Weekday(MyStartTime) > 1 And Weekday(MyStartTime) < 6 Then 

     MyHours = DateDiff("h", MyStartTime, MyEndTime) 

    ElseIf Weekday(MyStartTime) = 6 Then 
     Dim EndTime 
     date1.Date() 
     MyHours = DateDiff("h", MyStartTime, MyEndTime) 


    End If 

    lblHours1.Text = MyHours 

VB.NET中的什麼算法最適合這種計算?

+0

你使用什麼時區?如果是觀察DST的當地時區,那麼這將變得更具挑戰性。 – 2010-08-10 19:12:35

回答

2

這裏有一個方法:

確定整個範圍的TimeSpan(小時)。

確定開始和結束是否在週末。減去適當的小時數。如果從週末開始,請在星期一的00:00之前清除小時。如果在週末結束,減去自週六00:00開始的時間。然後考慮週末之間的任何整個週末。

這需要實施3種方法來返回要減去的小時數。如果沒有,則每個返回0

NumberOfHoursBetweenDateAndNextMonday - 在週末的一天開始時。 NumberOfHoursBetweenDateAndEarliestSaturday - 在週末的一天結束。 NumberOfFullWeekendHoursWithinRange - 所有那些日子之間。

Dim MyHours As TimeSpan = MyEndTime - MyStartTime 

'account for start being on a weekend 
If (MyStartTime.DayOfWeek = vbSaturday Or vbSunday) Then 
    'subtract number of hours until Monday at 00:00 
    MyHours -= NumberOfHoursBetweenDateAndNextMonday(MyStartTime) 

End If 

If (MyEndTimeTime.DayOfWeek = vbSaturday Or vbSunday) Then 
    'subtract number of hours elapsed after Saturday at 00:00 
    MyHours -= NumberOfHoursBetweenDateAndEarliestSaturday(MyEndTime) 
End If 

MyHours -= NumberOfFullWeekendHoursWithinRange(MyStartTime, MyEndTime) 
+0

非常感謝,這看起來只是我尋找的幫助。 – Mike 2010-08-10 18:13:30

1

嘗試增加這個功能,如果你正在使用VB.net:

Public Function GetWorkdays(ByVal pstart As Date, ByVal pend As Date) As Integer 

    If Weekday(pend) = 7 Then 
     GetWorkdays = 7 - Weekday(pstart) + 5 * (DateDiff("ww", pstart, pend) - 1) + Weekday(pend) - 2 
    Else 
     GetWorkdays = 7 - Weekday(pstart) + 5 * (DateDiff("ww", pstart, pend) - 1) + Weekday(pend) - 1 
    End If 

End Function 

您可以通過測試該代碼:

設置兩個日期爲 GetWorkdays(pstart,pend)凡爲 PSTART是你的開始日期並作爲結束日期。 它會計算排除週末的天數。

試試吧。馬部海!

相關問題