Хорошо, я отказался от этого.Вот что я пытаюсь сделать: у меня есть восход, закат и текущее время в определенном часовом поясе.Я хочу знать, день это или ночь, выяснив, находится ли текущее время между временем восхода и захода солнца.
Вот что у меня есть:
NSLog(@"%@ - %@ - %@",currTime,sunrise,sunset);
NSDateFormatter *formatter1 = [[NSDateFormatter alloc]init];
NSDateFormatter *formatter2 = [[NSDateFormatter alloc]init];
[formatter1 setDateFormat:@"hh:mm a"];
[formatter2 setDateFormat:@"EEE, dd MMM yyyy h:mm a z"];
NSDate *rise = [formatter1 dateFromString:sunrise];
NSDate *set = [formatter1 dateFromString:sunset];
NSDate *time = [formatter2 dateFromString:currTime];
[formatter1 release];
[formatter2 release];
unsigned int flags = NSHourCalendarUnit | NSMinuteCalendarUnit;
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components1 = [calendar components:flags fromDate:rise];
NSDateComponents *components2 = [calendar components:flags fromDate:set];
NSDateComponents *components3 = [calendar components:flags fromDate:time];
NSDate *Sunrise = [calendar dateFromComponents:components1];
NSDate *Sunset = [calendar dateFromComponents:components2];
NSDate *Time = [calendar dateFromComponents:components3];
NSLog(@"\nSunrise: %@ \nSunset:%@ \nTime:%@",rise,set,time);
NSLog(@"\nSunrise: %@ \nSunset:%@ \nTime:%@",Sunrise,Sunset,Time);
Вот первый вывод:
Пт, 10 июня 2011 4:00 утра SAST - 7:46 утра - 5:41 вечера
И вот второй (прежде чем он обеспокоен тольковремя, а не дата)
Восход: 1969-12-31 22:46:00 +0000
Закат: 1970-01-01 08:41:00 + 0000
Время: 2011-06-10 02:00:00 + 0000
И, наконец, вот последний вывод (обратите внимание, как запуталось время?):
Восход: 0001-12-31 22:27:01 +0000
Закат: 0001-01-01 08:22:01 +0000
Время: 0001-01-01 01:41:01 + 0000
Итак, я хотел вставить эти итоговые даты в мой метод, который проверяет, находится ли он между датами:
+(BOOL)date:(NSDate*)date isBetweenDate:(NSDate*)beginDate andDate:(NSDate*)endDate {
return (([date compare:beginDate] != NSOrderedAscending) && ([date compare:endDate] != NSOrderedDescending));
}
Однако, пока яПолучите, что проблема с датой выяснила, что метод не будет работать.:/ Мне нужна помощь!Что я делаю не так?
Хорошо, поэтому я перестал пытаться заставить NSDate
s работать на меня.Проблемы с часовым поясом просто убили мой мозг на выходные.В любом случае, я решил использовать предложение BoopMeister
, но оно не работает так, как я ожидал.Вот пример:
Используя настройки сверху, я добавил следующие строки:
NSInteger riseHour = [components1 hour];
NSInteger setHour = [components2 hour];
NSInteger timeHour = [components3 hour];
NSLog(@"Rise: %i Set: %i Time: %i",riseHour,setHour,timeHour);
Теперь, когда я подключаю эти переменные: Текущее время: Fri, 10 Jun 2011 9:07 am CDT
Восход солнца: 6:33 am
Закат: 8:32 pm
Однако, когда я вывожу строки из описанных выше методов, вот что я получаю:
Подъем: 6 Набор: 20 Время: 23
Что за?