Сравнивая NSDates для определения дня или ночи? - PullRequest
4 голосов
/ 15 декабря 2010

Я анализирую погодный XML, который дает мне время восхода и захода солнца для местоположения пользователя.Я проанализировал их как строки, и они выглядят так: 7:20 am и 5:34 pm, например.

Затем я преобразовал эти два раза в NSDate следующим образом:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"hh:mm a"];
NSDate *Sunrise = [dateFormat dateFromString:sunrise]; 
NSDate *Sunset = [dateFormat dateFromString:sunset];
NSDate *today = [NSDate date];      
[dateFormat release];

Теперь у меня есть три даты, которые я хочу сравнить, чтобы определить, является ли текущее время ночным илидень.Проблема в том, что когда я NSLog раз восхода и заката солнца, я вижу, что год равен 1970 для обеих дат, полученных из строк.Я не знаю, с чего начать, как сравнить даты.Есть идеи?

Ответы [ 3 ]

2 голосов
/ 15 декабря 2010

Theres на самом деле довольно простой способ сделать это. NSDateFormatter имеет метод с именем setDefaultDate:, который в основном использует данный объект даты для заполнения любых полей, не включенных в строку формата даты. Итак, используя переменные из вашего образца:

[dateFormat setDefaultDate:today];

Просто поставьте эту строку перед вызовами на dateFromString:, и все будет хорошо.

Ссылка: Ссылка на класс NSDateFormatter

1 голос
/ 15 декабря 2010

Вы можете разделить NSDate на Компоненты Date, вам потребуется объект NSCalendar и сказать ему, чтобы дать вам экземпляр NSDateComponents на вашу дату.

Примерно так:

NSCalendar *gregorian = [NSCalendar currentCalendar];
NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;
NSDate *date = [NSDate date];
NSDateComponents *comps = [gregorian components:unitFlags fromDate:date];
NSLog(@"Parts: Day %d, Month %d, Year %d", [comps day], [comps month], [comps year]);

Вместо примера «unitFlags» вы можете ИЛИ вместе использовать любой из флагов NS * CalenderUnit, чтобы получить соответствующие элементы в «comps».В вашем случае это будет что-то вроде NSHourCalenderUnit |NSMinuteCalenderUnit.

0 голосов
/ 15 декабря 2010

Попробуйте изменить переменные NSString для восхода и захода солнца, чтобы они содержали текущую дату.Что-то вроде "2010-12-15 7:20 утра".После того, как вы проанализируете это, ваши даты восхода и заката будут правильными, и сравнение должно быть простым.

...