将ISO 8601时间戳转换为NSDate:如何处理UTC时间偏移?

EJV*_*EJV 37 iso utc nsdate

我无法将ISO 8601时间戳转换为NSDate.我尝试使用NSDateFormatter,但我无法使用时间戳结束时出现的UTC时间偏移.为了解释,我想将以下时间戳转换为NSDate:2011-03-03T06:00:00-06:00.我的问题是:我如何处理"-06:00"部分?我尝试使用yyyy-MM-dd'T'HH:mm:ssZ我的日期格式字符串,但它不起作用.有什么建议?

joe*_*l.d 61

无需删除:'s.要处理"00:00"样式时区,您只需要"ZZZZ":

迅速

let dateString = "2014-07-06T07:59:00Z"

let dateFormatter = NSDateFormatter()
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZ"
dateFormatter.dateFromString(dateString)
Run Code Online (Sandbox Code Playgroud)

Objective-C的

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
dateFormat.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
NSString *input = @"2013-05-08T19:03:53+00:00";
[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZ"]; //iso 8601 format
NSDate *output = [dateFormat dateFromString:input];
NSLog(@"Date output: %@", output);
Run Code Online (Sandbox Code Playgroud)

  • 这就像我第100次搜索日期短代码一样.我希望有一个网站,我可以输入一个日期,它会自动生成一个日期格式字符串. (14认同)

die*_*men 18

就我而言,我收到了类似的东西:

"2015-05-07T16:16:47.054403Z"

我不得不使用:

"YYYY ' - ' MM ' - ' dd'T'HH ':' 毫米 ':' ss.SSSZ"


Dav*_*ong 5

问题是:时区偏移内的字符.您可以只显式删除该冒号,或删除所有冒号,然后继续.例如:

NSString *s = @"2011-03-03T06:00:00-06:00";
s = [s stringByReplacingOccurrencesOfString:@":" withString:@""];
NSDateFormatter *f = [[NSDateFormatter alloc] init];
[f setDateFormat:@"yyyy-MM-dd'T'HHmmssZZ"];
NSDate *d = [f dateFromString:s];
NSLog(@"%@", d);
Run Code Online (Sandbox Code Playgroud)

这个日志:

EmptyFoundation[5088:707] 2011-03-03 12:00:00 +0000
Run Code Online (Sandbox Code Playgroud)