5

我需要将从服务器检索到的日期字符串转换为本地 NSDate,该字符串如下所示:

"Fri, 30 Nov 2012 00:35:18 GMT"

但现在是 11 月 30 日星期五上午 11:36,那么如何将字符串转换为有意义的本地 NSDate?

我发现:

iPhone:NSDate 将 GMT 转换为本地时间

但看起来它的作用正好相反。

4

2 回答 2

15

请注意,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
于 2012-11-30T00:49:32.020 回答
1

只需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];
于 2012-11-30T00:41:25.160 回答