Кастинг DateTime / магия - PullRequest
       2

Кастинг DateTime / магия

0 голосов
/ 24 сентября 2010

Есть ли хороший лаконичный способ написать эту логику на C #?

if ((DateTime.Now >= "8:00 AM") && (DateTime.Now < 5:00 PM))
{// do something}

Я делаю демонстрационное приложение, где я хочу, чтобы что-то произошло в рабочий день, но я не хочуКод, чтобы выделиться много (много кастинга = плохо).(Потому что я хочу, чтобы мои демонстрационные материалы было легче увидеть.

Ответы [ 4 ]

11 голосов
/ 24 сентября 2010

Ну, вы можете сделать:

DateTime now = DateTime.Now;
if (now.Hour < 8 || now.Hour >= 17)

Обратите внимание, что я обычно предпочитаю использовать свойство DateTime.Now один раз , копируя результат в локальную переменную, как указано выше -Таким образом, вы не получаете странные возможности из-за изменения времени между вызовами.Здесь нет проблем, но это может быть и в других случаях.

Другая возможность - использовать DateTime.TimeOfDay, если вы хотите обрабатывать вещи таким образом.Я думаю, что выше все так же просто, как кажется.

РЕДАКТИРОВАТЬ: Стивен отметил, что я изменил && в вашей первоначальной логике на ||- Ваша оригинальная логика никогда не может работать, как это никогда не может быть до 8 утра и после 5 вечера.Вышесказанное работает для «если это не в рабочий день» - если вы хотите «если это в рабочий день», вам просто нужно:

DateTime now = DateTime.Now;
if (now.Hour >= 8 && now.Hour < 17)
4 голосов
/ 24 сентября 2010

Я думаю, что вы хотите сделать здесь что-то вроде этого:

var now = DateTime.Now;
if (now.Hour >= 8 && now.Hour < 17)
1 голос
/ 24 сентября 2010

Если вы хотите сделать его «красивым», вы также можете использовать метод расширения:

public static class DateTimeHelper
{
    public static DateTime Time(this string time)
    {
        DateTime theTime = DateTime.Parse(time);
        return theTime;
    }
}

...

   if (DateTime.Now < "8:00 AM".Time() && DateTime.Now > "5:00 PM".Time())
   {
        // do something
   }
0 голосов
/ 24 сентября 2010

Если вы можете отформатировать строку в правильном формате для текущей даты и времени начала / окончания, вы можете использовать что-то вроде этого.

DateTime now = DateTime.Now;
DateTime start = Convert.ToDateTime(now.Date.ToShortDateString() + " 8:00:00 AM");
DateTime end = Convert.ToDateTime(now.Date.ToShortDateString() + " 5:00:00 PM");
if (now >= start && now < end)
{

}

Я все еще думаю, что лучше использовать часовой метод, опубликованный другими, но этот метод дает ответ, аналогичный тому, как вы задавали свой вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...