Обычный вопрос DateTime - PullRequest
       13

Обычный вопрос DateTime

3 голосов
/ 29 октября 2010

Я пишу сервис, но мне нужны настройки конфигурации, чтобы убедиться, что сервис не работает в течение определенного времени в один день недели. например, понедельник с 17:00 до 19:00.

Можно ли создать дату-время, представляющее любой понедельник, чтобы у меня был один ключ конфигурации приложения для DontProcessStartTime и один для DontProcessEndTime со значениями, такими как «Понедельник 17:00» и «Понедельник 19:00»?

В противном случае я предполагаю, что мне понадобятся отдельные ключи для дня и времени для начала и конца временного окна.

Есть мысли?

спасибо

Ответы [ 5 ]

4 голосов
/ 29 октября 2010

Вы можете использовать утилиту, которая будет анализировать текст вашего дня недели в перечислении System.DayOfWeek, пример здесь . Затем вы можете использовать Enum в сравнении с DateTime.Now.DayOfWeek

2 голосов
/ 29 октября 2010

Вы можете сохранить день недели, часы начала и окончания в файле конфигурации, а затем использовать функцию, подобную следующей:

public bool ShouldRun(DateTime dateToCheck)
{
     //These should be read from your config file:
     var day = DayOfWeek.Monday;
     var start = 17;
     var end = 19;

     return !dateToCheck.DayOfWeek == day &&
            !(dateToCheck.Hour >= start && dateToCheck.Hour < end);
}
1 голос
/ 29 октября 2010

Объект DateTime не может обработать значение, которое означает все понедельники. Это должен быть конкретный понедельник. Существует перечисление DayOfWeek. Еще один объект, который может вам помочь, это TimeSpan объект. Вы можете использовать DayOfWeek в сочетании с TimeSpan, чтобы указать, когда начинать, а затем использовать другой TimeSpan, чтобы указать, как долго

1 голос
/ 29 октября 2010

Это очень грубый код, но показывает, что вы можете проверить объект DateTime, содержащий текущее время, как вы хотите:

protected bool IsOkToRunNow()
{
    bool result = false;

    DateTime currentTime = DateTime.Now;

    if (currentTime.DayOfWeek != DayOfWeek.Monday && (currentTime.Hour <= 17 || currentTime.Hour >= 19))
    {
        result = true;
    }

    return result;
}
1 голос
/ 29 октября 2010

Вы можете использовать DayOfTheWeek свойство DateTime. А для проверки правильного времени вы можете использовать DateTime.Today (возвращает дату и время, установленные на сегодняшний день, с временем, установленным на 00:00:00) и добавить к нему необходимое количество часов и минут.

...