Member 11403304 Ответов: 3

Как проверить, является ли день недели выходным и окончанием программы?


Я хотел бы проверить, является ли день недели выходным, и если да, то отправить предупреждающее сообщение и завершить программу.
Мое заявление elseif не работает (ElseIf intDayOfWeek = 1 OrElse intDayOfWeek = 7 тогда)

Shared Sub main()
        Dim objJobExecution As New Msc.Integration.MessageBroker.Library.v4.JobExecution("ServiceCatalog", "Document Publishing", "Lookup")
        Dim blnWarningFlag As Boolean = False
        Dim dtmTime = New TimeSpan(DateTime.Now.Hour, DateTime.Now.Minute, 0)
        Dim dblMinutes As Double = dtmTime.TotalMinutes
        Dim objLookupList As List(Of Msc.Integration.Mncis.Library.v4.DocumentPublishingLookup) = Nothing
        Dim intDayOfWeek As Integer = DateTime.Today.DayOfWeek

        Try
            'Compare current minutes with schedule minutes
            If (dblMinutes >= 480 AndAlso dblMinutes < 540) OrElse
                (dblMinutes >= 660 AndAlso dblMinutes < 665) OrElse
                (dblMinutes >= 780 AndAlso dblMinutes < 785) OrElse
                (dblMinutes >= 900 AndAlso dblMinutes < 905) OrElse
                (dblMinutes >= 1020 AndAlso dblMinutes <= 1025) Then
                'Call method to get documents
                objJobExecution.AddExecutionStep("Calling GetAll")
                objLookupList = Msc.Integration.Mncis.Library.v4.DocumentPublishingLookup.GetAllReadyForPublishing()
            ElseIf (dblMinutes >= 540 AndAlso dblMinutes <= 1020) Then
                'Call method to get documents
                objJobExecution.AddExecutionStep("Calling GetLast60")
                objLookupList = Msc.Integration.Mncis.Library.v4.DocumentPublishingLookup.GetLast60MinReadyForPublishing()
                'Check if day of week is weekend and post warning message and exit program
            ElseIf intDayOfWeek = 1 OrElse intDayOfWeek = 7 Then
                objJobExecution.AddExecutionStep("Outside of schedule do nothing")
                blnWarningFlag = True
            End If
    End Sub


Что я уже пробовал:

ElseIf intDayOfWeek = 1 OrElse intDayOfWeek = 7 Then

                objJobExecution.AddExecutionStep("Outside of schedule do nothing")
                blnWarningFlag = True
End If

[no name]

Используйте свой отладчик, чтобы выяснить, что означает "не работает". DayOfWeek-это перечисление и пронумеровано от 0 до 6, так что оно никогда не будет 7.

Richard Deeming

Вы делаете это точно так же, как вам было сказано, Когда вы опубликовали тот же вопрос три дня назад!
Как я могу понять, если день суббота или воскресенье?[^]

3 Ответов

Рейтинг:
25

Leo Chapiro

Взгляните на Перечисление Дней Недели (Система)[^] :

The DayOfWeek enumeration represents the day of the week in calendars that have seven days per week. The value of the constants in this enumeration ranges from DayOfWeek.Sunday to DayOfWeek.Saturday. If cast to an integer, its value ranges from zero (which indicates DayOfWeek.Sunday) to six (which indicates DayOfWeek.Saturday).

Как видите, 1-й день-это не воскресенье, а 7-й-не суббота!
Таким образом, ваш код должен быть:

If intDayOfWeek = 0 Or intDayOfWeek = 6 Then


Лучше использовать константы вот так:

If intDayOfWeek = DayOfWeek.Saturday Or intDayOfWeek = DayOfWeek.Sunday Then
 objJobExecution.AddExecutionStep("Outside of schedule do nothing")
 blnWarningFlag = True
End If


Member 11403304

Спасибо _duDE, я добавил код, который вы предложили. В отладки, как мне заставить программу думать, сегодня воскресенье или суббота, так что он может работать 3-й вариант.

Рейтинг:
2

OriginalGriff

Начните с отладчика: поместите точку останова в первую строку функции и запустите свой код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что именно то, что вы ожидали, произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

На первый взгляд, он проходит первый тест или, возможно, второй, так что он никогда не доберется до третьего раза, чтобы вы научились новому (и очень, очень полезному) навыку: отладке!


Member 11403304

Я добавил код, как предложил _duDE, но я не уверен, как в режиме отладки я могу обмануть программу, чтобы она думала, что сегодня воскресенье (6) или суббота (0), чтобы она могла запустить 3-й вариант.

Рейтинг:
1

Patrice T

Вы должны попробовать

ElseIf intDayOfWeek = 1 Or intDayOfWeek = 7 Then

Ой, моя ошибка.
Во-первых, снимите try и посмотрите, есть ли сообщение об ошибке.
Использование try без catch только не позволяйте себе говорить, если в вашем коде есть проблема. Совет: используйте try/catch только в том случае, если у вас есть очень веская причина сделать это, и только после отладки вашего кода.

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Он позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.