1

我有一个 .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 号,我不会调整它。

有没有更清洁的方法来做到这一点?

4

1 回答 1

0

如果星期一是该月的 2 日或 3 日,您的代码将无法正常工作。(即 2 mod 5 = 2,所以adjustedDay = 0)

另一个棘手的部分是应用程序需要在第一次运行,但是 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
于 2015-09-25T15:48:58.600 回答