我需要以小时计算从创建记录到当前时间已经过了多长时间。困难的是我需要排除周末时间。
我一直在研究这个问题已经有一段时间了,我只是输了。这是我到目前为止所拥有的。提前感谢您的帮助。
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 :(得分: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是您的开始日期,并作为您的结束日期。
它将计算不包括周末的天数。
试一试。马布海!