Iphone 比较日期来决定白天还是黑夜?

Iphone 比较日期来决定白天还是黑夜?,iphone,objective-c,cocoa-touch,nsdate,nsdateformatter,Iphone,Objective C,Cocoa Touch,Nsdate,Nsdateformatter,我正在解析一个天气XML,它为我提供了用户位置的日出+日落时间。我将它们解析为字符串,它们如下所示:7:20am和5:34pm 然后,我通过执行以下操作将这两次转换为NSDate: NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"hh:mm a"]; NSDate *Sunrise = [dateFormat dateFromString:sunrise]; NS

我正在解析一个天气XML,它为我提供了用户位置的日出+日落时间。我将它们解析为字符串,它们如下所示:
7:20am
5:34pm

然后,我通过执行以下操作将这两次转换为
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。我不知道从哪里开始比较日期。有什么想法吗?

尝试更改日出和日落NSString变量以包含当前日期。类似于“2010-12-15上午7:20”。解析后,日出和日落日期将是正确的,比较应该很容易。

您可以将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标志组合在一起,将相应的元素放入“comps”。在您的情况下,它将类似于NSHourCalenderUnit | NSMinuteCalenderUnit。

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

[dateFormat setDefaultDate:today];
只要把这一行放在对
dateFromString:
的调用之前,就可以开始了


参考:

因为这将是动态的;我无法更改XML文件中的日期。但是,您可以控制传递到dateFromString的字符串。它可能很简单,就像在函数中添加“今天7:20pmtoday”一样。dateFromString相当聪明。根据我的需要可能有点复杂,但谢谢你的帮助。太好了,我以后会用到它。谢谢哇,这对我来说是新的,我想我现在必须重构一些代码;)