Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSDate returns wrong date on the first of month

Tags:

date

ios

nsdate

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 :

  1. Set the system date as 01 - June - 2011 & time between 00.00 midnight to 5.59 AM.
  2. Use following code :
    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?

like image 618
Samyag Shah Avatar asked Nov 04 '22 18:11

Samyag Shah


1 Answers

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.

like image 128
Samyag Shah Avatar answered Nov 09 '22 13:11

Samyag Shah