如何分析与NSDateFormatter这些时区?(How to parse these time

2019-10-30 20:33发布

我解析了大量的互联网日期。 首先,我尝试用格式化en_US_POSIX区域,然后用en_GB 。 代码看起来或多或少是这样的:

{
    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];
}

然而,与以下时区的日期字符串无法解析:

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)

我究竟做错了什么?

我应该预先处理字符串去除只有这些情况下,时区括号?

Answer 1:

NSDate可以存储在一个时间点没有时区信息。 这是给你的软件知道具体是否NSDate实例存储的时间点在UTC或本地时区。 在大多数情况下,你要使用UTC日期。

正因为如此,它解析日期时,处理时区差异是很重要的。 但是,这是不可能记住时区的日期本来是(至少不与NSDate唯一实例)。

因此,我建议你切断时区在括号中,只是分析数字时区前偏移。 通过这种方式,可以将所有的字符串转换成NSDate在UTC实例,你不应该有解析字符串的任何问题。

而不应日期fromat是(即大写的数字时间区间Z偏移)?

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


文章来源: How to parse these time zones with NSDateFormatter?