将时区感知.isoformat()日期时间字符串转换为NSDate

时间:2013-12-02 22:47:06

标签: ios objective-c

我从我的网络API获得以下NSString:@“2013-12-03T19:13:56 + 00:00”

我想使用NSSate并使用NSDateFormatter创建相应的NSDate。对于我的生活,我无法找出可以帮助我做到这一点的格式化字符串。我总是没事。这是我正在尝试的:

+ (NSDate *)dateFromUTCFormattedDateString:(NSString *)dateString
{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
    [dateFormatter setTimeZone:timeZone];
    [dateFormatter setDateFormat:@"YYYY-MM-ddThh:mm:ssTZD"];
    // Apply the date formatter and return it.
    return [dateFormatter dateFromString:dateString];
}

1 个答案:

答案 0 :(得分:1)

一个问题是嵌入了':'的时区。使用以下日期格式:

@"yyyy-MM-dd'T'HH:mm:sszzz"

请注意'zzz'代替'TZD'。

请参阅ICU用户指南:Formatting Dates and Times

enter image description here

测试:

NSString *dateString = @"2013-12-03T19:13:56+00:00";

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
[dateFormatter setTimeZone:timeZone];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:sszzz"];

NSDate *dateFromString = [dateFormatter dateFromString:dateString];
NSLog(@"dateFromString: %@", dateFromString);

NSLog输出:

dateFromString: 2013-12-03 19:13:56 +0000