我需要将从服务器检索到的日期字符串转换为本地 NSDate,该字符串如下所示:
"Fri, 30 Nov 2012 00:35:18 GMT"
但现在是 11 月 30 日星期五上午 11:36,那么如何将字符串转换为有意义的本地 NSDate?
我发现:
但看起来它的作用正好相反。
我需要将从服务器检索到的日期字符串转换为本地 NSDate,该字符串如下所示:
"Fri, 30 Nov 2012 00:35:18 GMT"
但现在是 11 月 30 日星期五上午 11:36,那么如何将字符串转换为有意义的本地 NSDate?
我发现:
但看起来它的作用正好相反。
请注意,NSDate 始终在内部以 GMT 格式存储日期。然后,您使用日期格式化程序在本地时区创建一个字符串。在这种情况下,您从一个字符串开始,因此需要首先使用日期格式化程序创建日期,然后再次使用它在您的本地时区创建一个字符串(它默认为时区不是指定的)。
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
只需NSDateFormatter
与格式化字符串一起使用eee, dd MMM yyyy HH:mm:ss zzz
。最后的 Zs 导致它从字符串中读取时区。
因此,给定QA1480,示例代码:
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];