My app used [NSDate date ] function to get current date. Its work fine other days except 1st of every month during AM. i.e Follow Following steps :
NSLog(@"Current Date :: %@",[NSDate date]);
The O/P is :: Current Date :: 2011-05-31 19:40:21 +0000
Desired O/P is :: Current Date :: 2011-06-01 00:00:0( i.e.the time which is set ) +0000
Also From 6 AM it works fine.
What is reason for this?
Actually I don't want NSDate in string format but what I want is NSDate date object corresponding to 1st date of current month. For which i use following snippet of code :
NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
[gregorian setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
NSDateComponents *comp = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit
| NSDayCalendarUnit) fromDate:[NSDatedate]];
[comp setDay:1];
NSDate *firstDayOfMonthDate = [gregorian dateFromComponents:comp];
[gregorian release];
return firstDayOfMonthDate;
Since [NSDate date] returns wrong date, components also contains wrong date. The above code works for all senario except the senario which i posted in beginning of this thread. What should I do?
Finally got the solution:
The point is, NSDate objects don't have a time zone associated with them, and a few releases back someone in Apple decided that NSDate's -description method, which is what NSLog uses, should use GMT+0 and NOT the local time zone for output. (I assume someone had a bug where they corrupted their locale setting, and that caused NSDate's -description method to crash, and so bug reports got filed...)
The short version: Use NSDateFormatter to output dates. Don't use -description.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With