vb.net - 计算从某个日期到当前日期耗时(不包括周末)

标签 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 中的哪种算法最适合此计算?

最佳答案

这是一种方法:

确定整个范围的时间跨度(以小时为单位)。

确定开始和结束是否在周末。减去适当的时间。如果从周末开始,请删除周一 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)

关于vb.net - 计算从某个日期到当前日期耗时(不包括周末),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3451683/

相关文章:

vb.net - 从 StringCollection 转换或转换为 ObjectCollection?

c# - 转换为VB后, 'is an event and cannot be called directly.'

c# - 获取浏览器中打开的标签页的 URL

vb.net - asp.net vb 网站循环遍历数据库行

vb.net - 在Visual Studio 2013库中找不到 Entity Framework

.net - Infragistics UltraWinGrid 删除确认

vb.net - 为每个循环遍历列表时删除列表中的项目

vb.net - 如何在Windows应用程序中的VB.NET项目中使用C#类?

无法使用 VB 从 C 函数读取 char *

vb.net - vb.net中的上下文菜单位置