Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSDateFormatter return incorrect date from string

I have a method,

+ (NSDate *) convertToDateFrom:(NSString *) dateString
{
    if (dateString == nil || [dateString isEqual:@""]) return nil; //return nil if dateString is empty
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
        [df setDateFormat:@"EEEE, dd MMMM yyyy HH:mm"];

    NSDate *date = [df dateFromString:dateString];

    return date;
}

When I pass,

@"Monday, 21 November 2011 17:01" //Passed string

It returns a wrong date,

2011-11-21 23:14:00 +0000 // Output

I am not sure whether I am using those flags correctly or NSDateFormatter isn't properly converting my string to date.

Am I doing something wrong?

Thanks

like image 778
TeaCupApp Avatar asked Jan 09 '12 03:01

TeaCupApp


1 Answers

The +0000 at the end of the date indicates GMT. All dates are stored relative to GMT; when you convert a date to a string or vice versa using a date formatter, the offset to your time zone is included. You can use NSDateFormatter's -setTimeZone: method to set the time zone used.

In short, you're not doing anything wrong in your code. Use [df stringFromDate:date]; to see that the date is correct. (You can also use NSDate's -descriptionWithCalendarFormat:timeZone:locale:.)

like image 122
Caleb Avatar answered Nov 09 '22 04:11

Caleb