Как использовать DateTime.Now.Hour? - PullRequest
0 голосов
/ 14 августа 2011

Что я пытаюсь сделать:

Я пытаюсь отключить телепередачи из файла XML на текущий час. Например, время сейчас 14:00, я хочу отключить все списки со всех каналов в этот текущий час.

Ниже приводится текущая дата, которая сопоставляется с файлами XMl и отображаются все совпадения. Я хочу сделать то же самое для текущего часа.

Если изменить метод на приведенный ниже, я получаю эту ошибку:

Ошибка 1 Оператор '==' не может быть применен к операндам типа 'System.DateTime' и 'int'

  bool MyDateCheckingMethod(string dateString)
            {
                DateTime otherDate = DateTime.ParseExact(dateString, "yyyyMMddHHmmss K", null);
                // Is this today (ignoring time)?
                return otherDate.Date == DateTime.Now.Hour;
            }

Это то, что я сейчас использую для отображения к сегодняшней дате, и оно отлично работает.

bool MyDateCheckingMethod(string dateString)
        {
            DateTime otherDate = DateTime.ParseExact(dateString, "yyyyMMddHHmmss K", null);
            // Is this today (ignoring time)?
            return otherDate.Date == DateTime.Now.Date;
        }

Вот еще код, чтобы сделать его немного понятнее.

void c_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            if (e.Error != null)
                return;


            var r = XDocument.Parse(e.Result);





            listBox2.ItemsSource = from tv in r.Root.Descendants("programme")
                                   where tv.Attribute("channel").Value == "1200"
                                   where MyDateCheckingMethod(tv.Attribute("start").Value)
                                   let channelE1 = tv.Attribute("channel")
                                   let startE1 = tv.Attribute("start")
                                   let nameEl = tv.Element("title")
                                   orderby tv.Attribute("start").Value ascending
                                   let urlEl = tv.Element("desc")


                                   select new TV1guide



                                   {
                                       DisplayName = nameEl == null ? null : nameEl.Value,
                                       ChannelName = channelE1 == null ? null : channelE1.Value,
                                       ChannelURL = urlEl == null ? null : urlEl.Value,
                                       StartTime = startE1 == null ? (DateTime?)null : DateTime.ParseExact(startE1.Value, "yyyyMMddHHmmss zzz", DateTimeFormatInfo.CurrentInfo, DateTimeStyles.AssumeLocal),



                                   };

Ответы [ 2 ]

4 голосов
/ 14 августа 2011

Ошибка, которую вы получаете, заключается в том, что вы пытаетесь сравнить дату и время с часом, а не просто сравнивать часы. Вы не можете сравнить int с DateTime напрямую.

Вот код, который будет работать:

bool MyDateCheckingMethod(string dateString)
{
    DateTime otherDate = DateTime.ParseExact(dateString, "yyyyMMddHHmmss K", null);
    DateTime now = DateTime.Now;
    // Is this the current date and hour?
    return otherDate.Date == now.Date
        && otherDate.Hour == now.Hour;
}

Если вы хотите выполнить проверку только в час, и вам все равно, совпадают ли вы с разными датами, вы можете изменить код так:

bool MyDateCheckingMethod(string dateString)
{
    DateTime otherDate = DateTime.ParseExact(dateString, "yyyyMMddHHmmss K", null);
    // Is this the current hour - regardless of date?
    return otherDate.Hour == DateTime.Now.Hour;
}

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

Обработка даты и времени часто более сложна, чем вы могли подумать, и требует некоторых предварительных знаний о том, как платформа .Net обрабатывает время. Часто бывает полезно взглянуть на документацию и немного поэкспериментировать в отдельном пустом проекте.

3 голосов
/ 14 августа 2011

Это должно работать:

return otherDate.Hour == DateTime.Now.Hour;

Однако это не обязательно означает тот же день, поэтому, возможно, вы ищете:

return otherDate.Date == DateTime.Now.Date &&
       otherDate.Hour == DateTime.Now.Hour;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...