如何用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"