NSDateFormatter return incorrect date from string

我只是一个虾纸丫 提交于 2019-11-26 11:31:25

问题


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


回答1:


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




回答2:


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



回答3:


Try setting the time zone and locale.

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


来源:https://stackoverflow.com/questions/8783667/nsdateformatter-return-incorrect-date-from-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!