比较NSDates以确定白天或黑夜?

时间:2010-12-15 19:29:25

标签: iphone objective-c cocoa-touch nsdate nsdateformatter

我正在解析天气XML,它为我提供了用户位置的日出+日落时间。我将它们解析为字符串,它们看起来像这样:7:20 am5: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 个答案:

答案 0 :(得分:2)

Theres实际上是一种非常简单的方法。 NSDateFormatter有一个名为setDefaultDate:的方法,它基本上使用给定的日期对象来填充日期格式字符串中未包含的任何字段。因此,使用样本中的变量:

[dateFormat setDefaultDate:today];

只需在调用dateFromString:之前放置此行,您就应该好了。

参考:NSDateFormatter Class Reference

答案 1 :(得分:1)

您可以将NSDate拆分为日期组件,您需要一个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标志与OR组合在一起,以将相应的元素转换为“comps”。在你的情况下,它会像NSHourCalenderUnit | NSMinuteCalenderUnit。

答案 2 :(得分:0)

尝试更改日出和日落NSString变量以包含当前日期。像“2010-12-15 7:20 am”之类的东西。解析之后,您的日出和日落日期将是正确的,并且比较应该很容易。