2010-08-10 161 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是你的开始日期并作为结束日期。 它会计算排除周末的天数。

试试吧。马部海!

相关问题