我在将ISO 8601时间戳转换为NSDate
. 我尝试使用NSDateFormatter
,但无法使用时间戳末尾出现的UTC时间偏移量。为了解释,我想将如下时间戳转换为NSDate
: 2011-03-03T06:00:00-06:00
。我的问题是:如何处理“-06:00”部分?我尝试使用yyyy-MM-dd'T'HH:mm:ssZ
作为我的日期格式字符串,但它不起作用。有什么建议么?
问问题
17901 次
6 回答
63
无需删除 :'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)
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);
于 2013-05-08T20:31:22.713 回答
18
就我而言,我收到了类似的东西:
“2015-05-07T16:16:47.054403Z”
我不得不使用:
"yyyy'-'MM'-'dd'T'HH':'mm':'ss.SSSZ"
于 2015-05-12T11:37:45.873 回答
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);
这记录:
EmptyFoundation[5088:707] 2011-03-03 12:00:00 +0000
于 2011-09-17T16:11:52.933 回答
4
这是我使用的方法:
-(NSDate *)dateFromISO8601String:(NSString *)dateString{
if (!dateString) return nil;
if ([dateString hasSuffix:@"Z"]) {
dateString = [[dateString substringToIndex:(dateString.length-1)] stringByAppendingString:@"-0000"];
}
dateString = [dateString stringByReplacingOccurrencesOfString:@":" withString:@""];
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
dateFormatter.dateFormat = @"yyyy-MM-dd'T'HHmmssZ";
return [dateFormatter dateFromString:dateString];
}
于 2012-09-22T15:18:49.740 回答
3
在 Swift 中将 ISO 8601 时间戳转换为 NSDate:
let dateFormatter = NSDateFormatter()
let inputDate = "2015-06-18T19:00:53-07:00"
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZ" //iso 8601
let outputDate = dateFormatter.dateFromString(inputDate)
println(outputDate!) //optional implicitly
或显式可选:
if let outputDate = dateFormatter.dateFromString(inputDate) {
println(outputDate) //no need !
}
于 2015-06-18T23:46:06.820 回答
0
Apple 支持ISO 8601 格式的单独格式
目标 C
NSISO8601DateFormatter *formater = [[NSISO8601DateFormatter alloc]init];
NSString *string = [formater stringFromDate:[NSDate date]];
于 2020-03-25T09:04:27.887 回答