无法格式化被Facebook创建日期,返回NULL日期
问题描述:
的Facebook提供的格式日期对象:2010-12-01T21:35:43+0000
无法格式化被Facebook创建日期,返回NULL日期
我想这个格式转换成NSDate的。
我正在使用以下代码。为什么它会返回null
。
NSDateFormatter *df = [[NSDateFormatter alloc] init];
dateString = [dateString stringByReplacingOccurrencesOfString:@"T" withString:@" "];
dateString = [dateString stringByReplacingOccurrencesOfString:@"+" withString:@" +"];
NSLog(@"%@", dateString);
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss '+'ZZZZ"];
NSLog(@"%@",df.dateFormat);
NSDate *date = [df dateFromString:dateString];
NSLog(@"%@ date",date);
答
只需更换'+'ZZZZ
与+zzzz
在你的代码..
NSString *[email protected]"2010-12-01T21:35:43+0000";
NSDateFormatter *df = [[NSDateFormatter alloc] init];
dateString = [dateString stringByReplacingOccurrencesOfString:@"T" withString:@" "];
dateString = [dateString stringByReplacingOccurrencesOfString:@"+" withString:@" +"];
NSLog(@"%@", dateString);
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss +zzzz"];
NSLog(@"%@",df.dateFormat);
NSDate *date = [df dateFromString:dateString];
NSLog(@"%@ date",date);
输出是:
2016-04-30 14:52:10.118 date[2523:187669] 2010-12-01 21:35:43 +0000
2016-04-30 14:52:10.120 date[2523:187669] yyyy-MM-dd HH:mm:ss +zzzz
2016-04-30 14:52:10.153 date[2523:187669] 2010-12-01 21:35:43 +0000 date
答
只需使用yyyy-MM-dd'T'HH:mm:ssZ
您dateFormat
并用字符串处理周围不乱的。
你可能想要做的唯一的事情就是设置locale
在苹果的Technical Q&A 1480列出,所以,这将无论什么样的日历设置的工作设备,否则可能会造成:
df.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
+0
为什么向下票?由于对所接受的答案的所有适当的尊重,它只是延续了OP的低效代码。除非原始字符串中表示的时区为“+ 0000”,否则接受的答案的“+ zzzz”将不起作用。你应该使用'Z'(如上所示)或'ZZZ'。 – Rob
答
你不需要在字符串替换任何字符
试试这个代码:
Objective-C的
NSString *[email protected]"2010-12-01T21:35:43+0000";
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZ"];
NSDate *date = [df dateFromString:dateString];
NSLog(@"%@ date",date);
斯威夫特:
let dateString: String = "2010-12-01T21:35:43+0000"
let df: NSDateFormatter = NSDateFormatter()
df.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZ"
let date: NSDate = df.dateFromString(dateString)!
print("date: \(date)")
这可能发生在'+ 0000'的时区,但在一般情况下不起作用。如果原始日期字符串是“2010-12-01T21:35:43-0500”或“2010-12-01T21:35:43 + 0100”,该怎么办?在这种情况下,上述不起作用。 '+'不应该在'dateFormat'中。你应该使用'Z'或'ZZZ'而不是'+ zzzz'。 – Rob