2016-04-30 146 views
1

的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); 

回答

1

只需更换'+'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 
+0

这可能发生在'+ 0000'的时区,但在一般情况下不起作用。如果原始日期字符串是“2010-12-01T21:35:43-0500”或“2010-12-01T21:35:43 + 0100”,该怎么办?在这种情况下,上述不起作用。 '+'不应该在'dateFormat'中。你应该使用'Z'或'ZZZ'而不是'+ zzzz'。 – Rob

-1

只需使用yyyy-MM-dd'T'HH:mm:ssZdateFormat并用字符串处理周围不乱的。

你可能想要做的唯一的事情就是设置locale在苹果的Technical Q&A 1480列出,所以,这将无论什么样的日历设置的工作设备,否则可能会造成:

df.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; 
+0

为什么向下票?由于对所接受的答案的所有适当的尊重,它只是延续了OP的低效代码。除非原始字符串中表示的时区为“+ 0000”,否则接受的答案的“+ zzzz”将不起作用。你应该使用'Z'(如上所示)或'ZZZ'。 – Rob

0

你不需要在字符串替换任何字符

试试这个代码:

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)")