周末天抵消使用mod

时间:2015-09-21 19:19:48

标签: vb.net offset weekend

我有一个.NET控制台应用程序,需要在每月的1日,5日,10日,15日,20日和25日运行。根据运行的日期,应用程序会发送不同类型的电子邮件。我想调整应用程序,以便如果其中一个日期在周末,它将在下周一运行。

我相信这就是我想要的:

Dim adjustedDay As Integer = Day(Today)
If Today.ToString("ddd") = "Mon" And adjustedDay > 1 Then
    If adjustedDay Mod 5 = 1 Then
        adjustedDay -= 1
    ElseIf adjustedDay Mod 5 = 2 Then
        adjustedDay -= 2
    End If
End If
Select Case adjustedDay
    Case 1
          ...
    Case 5
          ...
    Case ...
          ...
End Select 

因此,如果今天是2015年9月21日星期一,我会调整为“20”并运行该代码。如果星期一碰巧在1号登陆,我不会调整它。

有更简洁的方法吗?

1 个答案:

答案 0 :(得分:0)

如果星期一是在当月的第二天或第三天,您的代码将无法正常工作。 (即2 mod 5 = 2,所以adjustDay = 0)

另一个棘手的部分是应用程序需要在1日运行,但是1 mod 5 = 1,这与其他所有0的情况不同。

这样的事情应该有效:

'Returns 0 for non-email days, otherwise returns 1,5,10,15,20,25
Private Function GetEmailDay(ByVal currentDate as Date) As Integer
    If currentDate.DayOfWeek = DayOfWeek.Saturday OrElse
        currentDate.DayOfWeek = DayOfWeek.Sunday Then
        Return 0
    End If

    Dim day As Integer = currentDate.Day

    Dim emailDays As New List(Of Integer)( {1,5,10,15,20,25} )
    If emailDays.Contains(day) Then
        Return day
    End If

    If currentDate.DayOfWeek = DayOfWeek.Monday Then
        If emailDays.Contains(day-1) Then 'check Sunday
            Return day-1
        End If
        If emailDays.Contains(day-2) Then 'check Saturday
            Return day-2
        End If
    End If

    Return 0
End Function