如何用NSDateFormatterparsing这些时区?

我正在parsing大量互联网date。 首先,我尝试使用en_US_POSIX语言环境的格式化程序,然后使用en_GB 。 代码看起来或多或less像这样:

 { NSDate *date = [dateString dateWithDateFormat:@"EEE, dd MMM yyyy HH:mm:ss z (zzz)" localeIdentifier:@"en_US_POSIX"]; if (date) return date; date = [dateString dateWithDateFormat:@"EEE, dd MMM yyyy HH:mm:ss z (zzz)" localeIdentifier:@"en_GB"]; return date; } - (NSDate*) dateWithDateFormat:(NSString*)dateFormat localeIdentifier:(NSString*)localeIdentifier { NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:localeIdentifier]; formatter.dateFormat = dateFormat; [formatter dateFromString:self]; } 

但是,具有以下时区的datestring无法parsing:

 Mon, 16 Jul 2012 12:08:17 +0100 (GMTUK) Thu, 6 Sep 2012 13:00:06 +0900 (KST) Wed, 3 Nov 2010 10:12:15 +0100 (Hora est ndar romance) Wed, 14 Sep 2011 14:37:35 +0100 (IST) Wed, 2 May 2012 09:41:06 +0200 (MEST) Sun, 31 Oct 2010 12:53:06 +0800 (SGT) Thu, 19 Jan 2012 08:34:44 -0300 (UYT) 

我究竟做错了什么?

在这些情况下,我是否应该预处理string以删除时区括号?

NSDate可以存储没有时区信息的时间点。 您的软件需要知道特定的NSDate实例是以UTC还是本地时区存储时间点。 在大多数情况下,您想要使用UTCdate。

因此,parsingdate时处理时区差异非常重要。 但是不可能记住date最初的时区(至less不是只有NSDate实例)。

所以我build议你在括号内切断时区,只是parsing之前的数字时区偏移量。 这样,您可以将所有string转换为UTC中的NSDate实例,并且parsingstring时不应该有任何问题。

而不应该datefromat是(即数字时区偏移大写Z)?

 @"EEE, dd MMM yyyy HH:mm:ss ZZZ"