【发布时间】:2011-06-10 08:26:29
【问题描述】:
好吧,我已经放弃了。这就是我想做的事情:我有一个日出、日落和某个时区的当前时间。我想通过确定当前时间是否介于日出和日落时间之间来知道是白天还是黑夜。
这是我所拥有的:
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);
这是第一个输出:
2011 年 6 月 10 日星期五上午 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));
}
但是,在我发现日期问题之前,我发现该方法不起作用。 :/ 我需要帮助!我做错了什么?
好的,所以我放弃了尝试让NSDates 为我工作。时区问题刚刚杀死了我周末的大脑。无论如何,我决定使用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
什么?
【问题讨论】:
-
前段时间我遇到了同样的问题,实际上我最终放弃了
NSDate,而只是编写了自己的日期方法。不过,期待看看其他人是否对此有答案。 -
我不想放弃 NSDate。我喜欢它,但它讨厌我。
标签: iphone objective-c nsdate nsdateformatter