NSDateFormatter: how to convert date string with 'GMT' to local NSDate?

陌路散爱 提交于 2019-11-29 02:34:04

Note that NSDate's always store the date, internally, in GMT. You then use a date formatter to create a string in your local time zone. In this case, you are starting with a string so need to use the date formatter to create the date in the first place, and then use it again to create a string in your local time zone (which it defaults to when the timezone is not specified).

NSString *dateString           = @"Fri, 30 Nov 2012 00:35:18 GMT";

NSDateFormatter *dateFormatter = [NSDateFormatter new];
dateFormatter.dateFormat       = @"EEE, dd MM yyyy HH:mm:ss zzz";

NSDate *date                   = [dateFormatter dateFromString:dateString];
NSString *localDateString      = [dateFormatter stringFromDate:date];

NSLog(@"%@", localDateString);
// Results:  Thu, 29 11 2012 19:35:18 EST

Just use NSDateFormatter with the formatting string eee, dd MMM yyyy HH:mm:ss zzz. The Zs at the end cause it to read the time zone from the string.

So, given QA1480, sample code:

NSLocale *usLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setLocale:usLocale];
[formatter setDateFormat:@"eee, dd MMM yyyy HH:mm:ss zzz"];
_createdAt = [formatter dateFromString:dateString];
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!