我有一个.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号登陆,我不会调整它。
有更简洁的方法吗?
答案 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