TeaCupApp
TeaCupApp

Reputation: 11452

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

Upvotes: 6

Views: 7910

Answers (3)

normalUser
normalUser

Reputation: 179

try using

df stringFromDate:date

Following worked on mine,

NSLog(@"Date for locale %@: %@",
      [[dateFormatter locale] localeIdentifier], [df stringFromDate:date]);

gave me output as :

Date for locale en_US: Wednesday, 26 June 2013 15:50

Upvotes: 0

Caleb
Caleb

Reputation: 125037

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:.)

Upvotes: 13

Hubert Kunnemeyer
Hubert Kunnemeyer

Reputation: 2261

Try setting the time zone and locale.

[df setLocale:[NSLocale currentLocale]];
[df setTimeZone:[NSTimeZone systemTimeZone]];

Upvotes: -1

Related Questions