sudo rm -rf
sudo rm -rf

Reputation: 29524

Comparing NSDates to determine day or night?

I'm parsing a weather XML that gives me the sunrise + sunset times for the user's location. I've parsed them as strings, and they look like this: 7:20 am and 5:34 pm, for example.

I then converted these two times into an NSDate by doing this:

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];

Now I have three dates which I now want to compare to determine whether the current time is night or day. The problem is, when I NSLog the Sunrise and Sunset times I see that the year is 1970 on both the dates that came from strings. I don't know where to start on how to compare the dates. Any ideas?

Upvotes: 4

Views: 1041

Answers (3)

Endemic
Endemic

Reputation: 1540

Theres actually a pretty simple way to do this. NSDateFormatter has a method called setDefaultDate: which basically uses a given date object to fill in any fields not included by the date format string. So, using the variables from your sample:

[dateFormat setDefaultDate:today];

Just put this line before the calls to dateFromString:, and you should be good to go.

Reference: NSDateFormatter Class Reference

Upvotes: 2

Dunkelstern
Dunkelstern

Reputation: 1624

You may split up a NSDate into Date Components, you'll need a NSCalendar Object and tell it to give you a NSDateComponents Instance for your date.

Like so:

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]);

Instead of the example "unitFlags" you may OR together any of the NS*CalenderUnit Flags to get the corresponding elements into "comps". In your case it would be something like NSHourCalenderUnit | NSMinuteCalenderUnit .

Upvotes: 1

chris
chris

Reputation: 16443

Try altering your sunrise and sunset NSString variables to contain the current date. Something like "2010-12-15 7:20am". Once you parse that, your Sunrise and Sunset dates will be correct, and the comparison should be easy.

Upvotes: 0

Related Questions