【问题标题】:VB.NET - counting days between two dates with exclusionsVB.NET - 计算两个日期之间的天数并排除
【发布时间】:2012-01-29 17:19:24
【问题描述】:

我正在尝试计算两个日期之间的天数,不包括 星期六星期日。到目前为止,我已经编写了这段代码

Dim startDay As Integer
Dim endDay As Integer
Dim days As Integer
Dim count As Integer

startDay = dtpStartDate.Value.DayOfWeek
endDay = dtpEndDate.Value.DayOfWeek

For days = startDay To endDay
    If days = 0 Or days = 6 Then           'Sunday = 0, Saturday = 6
        count += 1
    End If
Next

    lblNoOfDays.Text = count

如果您选择同一周内的两个日期,则效果很好。 (例如:1 月 23 日至 1 月 27 日,结果为 5) 但是,如果我将它们设置为不同周的日期(例如:1 月 23 日至 1 月 30 日,给出结果 1),则会给出不正确的结果。

我知道这是因为循环而发生的,但我想不出办法来克服这个问题。谁能给我一个建议,解决方案??

谢谢

【问题讨论】:

标签: vb.net days


【解决方案1】:
Dim count = 0
Dim totalDays = (dtpEndDate - dtpStartDate).Days

For i = 0 To totalDays
    Dim weekday As DayOfWeek = startDate.AddDays(i).DayOfWeek
    If weekday <> DayOfWeek.Saturday AndAlso weekday <> DayOfWeek.Sunday Then
        count += 1
    End If
Next

lblNoOfDays.Text = count

【讨论】:

  • 做了一个小改动,(dtpEndDate.Value - dtpStartDate.Value).DaysDim startDate As Date 在我的代码中完美运行!非常感谢:)
【解决方案2】:

此函数计算两个日期之间的非周末天数:

    Public Shared Function WorkingDaysElapsed(ByVal pFromDate As Date, ByVal pToDate As Date) As Integer

        Dim _elapsedDays As Integer = 0
        Dim _weekendDays As DayOfWeek() = {DayOfWeek.Saturday, DayOfWeek.Sunday}

        For i = 0 To (pToDate - pFromDate).Days
            If Not _weekendDays.Contains(pFromDate.AddDays(i).DayOfWeek) Then _elapsedDays += 1
        Next

        Return _elapsedDays

    End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-26
    • 2019-09-27
    • 1970-01-01
    • 2011-11-08
    相关资源
    最近更新 更多