NSDateFormatter时区(Etc / GMT)无法为dateFromString解析

6

我尝试使用以下代码将2011-07-11 13:28:59 Etc/GMT转换为NSDate,但结果为nil。

NSString *dateString=@"2011-07-11 13:28:59 Etc/GMT";
NSDateFormatter *dateformatter=[[NSDateFormatter alloc] init];
[dateformatter setDateFormat:@"yyyy-MM-dd hh:mm:ss z"];
NSDate *purchaseDate = [dateformatter dateFromString:dateString];

这个日期来自苹果服务器本身,用于应用内购买验证。我已经查阅了很多与时区有关的线程,但是没有一个线程展示如何转换这个 Etc/GMT
我尝试过使用 zzzzzzzzzzZZZZZZZZZZ,但问题仍未解决。

你们能帮我回答这个问题吗?http://stackoverflow.com/questions/15162835/how-to-use-nsdateformatter-to-venezuela谢谢。 - tony
3个回答

17

正确的dateFormatyyyy-MM-dd HH:mm:ss VV,这就是你应该使用来解决问题的。


太棒了!在任何地方都找不到这个 - 谢谢你。 - Henry Heleine

9

// Swift版本

    let DateString = "2016-01-21 00:29:09 Etc/GMT"
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss VV"
    var dateObject = dateFormatter.date(from: DateString)

2
NSString *dateString=@"2011-07-11 13:28:59 Etc/GMT";
dateString = [dateString stringByReplacingOccurrencesOfString:@"Etc/GMT" withString:@"GMT"];
NSDateFormatter *dateformatter=[[NSDateFormatter alloc] init];
[dateformatter setDateFormat:@"yyyy-MM-dd HH:mm:ss z"];

// Or stuff....>>

NSDate *date = [dateformatter dateFromString: dateString];
NSLog(@"You may Need This  =========%@",date);
dateformatter = [[[NSDateFormatter alloc] init] autorelease];
[dateformatter setDateFormat:@"yyyy-MM-dd hh:mm:ss a"];

NSString *convertedString = [dateformatter stringFromDate:date];
NSLog(@"Converted String : %@",convertedString);

///可能有帮助 =====>> http://unicode.org/reports/tr35/


这可行!我确实阅读了上述文件和时区回退,但很难理解。我仍然不明白为什么返回Etc/GMT而不是GMT,以及Etc/GMT*和纯粹的GMT之间的区别是什么。 - darshansonde
2
警告,Etc/GMT和GMT不是同一件事。 - Ash
Etc/GMT并不严格等同于UTC或GMT。例如,TZ='Etc/GMT+4'使用"GMT+4"作为缩写,实际上表示比UTC慢4小时(即位于Greenwich西边),尽管很多人可能会期望它表示比UTC快4小时(即位于Greenwich东边)。 - kalpesh jetani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接