计算从日期到当前日期的经过时间(以小时为单位),不包括周末

时间:2010-08-10 17:26:37

标签: vb.net

我需要以小时计算从创建记录到当前时间已经过了多长时间。困难的是我需要排除周末时间。

我一直在研究这个问题已经有一段时间了,我只是输了。这是我到目前为止所拥有的。提前感谢您的帮助。

   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中哪种算法最适合这种计算?

3 个答案:

答案 0 :(得分:2)

我建议使用TimeSpan对象计算小时数  http://msdn.microsoft.com/en-us/library/269ew577.aspx

除此之外,如果你能弄清楚它下周的哪一天以及星期六和星期日之间的数量那么只需简单地减去那个数字x 24

Dim MyHours As TimeSpan = MyEndTime-MyStartTime 

答案 1 :(得分: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)

答案 2 :(得分: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是您的开始日期,并作为您的结束日期。 它将计算不包括周末的天数。

试一试。马布海!