2016-04-30 158 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)")