【问题标题】:NSDateFormatter Bug : incorrect string to date conversionNSDateFormatter 错误:不正确的字符串到日期转换
【发布时间】:2012-04-13 07:10:14
【问题描述】:

我有一个 UTC 字符串,我想将其转换为 NSDate。不知怎的,我得到了 30 分钟的错误

字符串是 2012-04-10T00:00:00+05:30

转换后的日期是 2012-04-09 19:00:00 +0000

应该在哪里 2012-04-09 18:30:00 +0000

我使用这个函数将字符串转换为日期

- (NSDate *)parseRFC3339Date{
    NSDateFormatter *rfc3339TimestampFormatterWithTimeZone = [[NSDateFormatter alloc] init];
    [rfc3339TimestampFormatterWithTimeZone setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];

    NSDate *theDate = nil;
    NSError *error = nil; 
    if (![rfc3339TimestampFormatterWithTimeZone getObjectValue:&theDate forString:self range:nil error:&error]) {
        NSLog(@"Date '%@' could not be parsed: %@", self, error);
    }

    [rfc3339TimestampFormatterWithTimeZone release];
    return theDate;
}

【问题讨论】:

    标签: objective-c nsdateformatter utc


    【解决方案1】:

    如果您要创建一个覆盖整个字符串的NSRange 并将其地址传递给-getObjectValue:forString:range:error:,那么您会在输出中看到它会很短。解析在冒号处停止,因为格式字符串中的“Z”仅匹配“-0800”(无冒号)之类的内容。如果您要指定 4 个 Z,“ZZZZ”,它将匹配“GMT-08:00”之类的内容。这允许使用冒号,但需要“GMT”。如果您确定日期字符串的格式,可以尝试插入“GMT”。

    【讨论】:

      【解决方案2】:

      我在这里遇到了 ISOdateFormatter http://boredzo.org/iso8601unparser/,它运行良好。资助它比修改传入的日期字符串更好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-24
        • 1970-01-01
        相关资源
        最近更新 更多