2016-09-05 2 views
-1

Я получаю DateFormat с сервера, как это:DateFormat всегда возвращает ноль

2016-09-04T17:44:44+02:00 

Так что я написал dateformatter:

private static let jsonDateFormatter: NSDateFormatter = { 
    let fmt = NSDateFormatter() 
    fmt.dateFormat = "yyyy-MM-dd'T'HH:mm:ss+SSS" 
    return fmt 
}() 

есть еще проблема, потому что, когда я делаю это jsonDateFormatter.dateFromString возвращает nil, поэтому dateFormat должен быть ошибочным.

Я не вижу проблемы.

+0

'yyyy-MM-dd'T'HH: mm: ssZZZZZ'? – Larme

+1

Знак «плюс» относится к части часового пояса, заменить «+ SSS» на «Z», «S» означает дробные секунды, что неверно. – vadian

+0

Спасибо Vadian :), что было проблемой. – user1007522

ответ

2

Согласно документации, предоставленной на Apple, Документах here

Правильный форматировщик для данного типа дат будет

yyyy-MM-dd'T'HH:mm:ssZZZZZ 

Как он используется в примере примера

let RFC3339DateFormatter = NSDateFormatter() 
RFC3339DateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") 
RFC3339DateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" 
//RFC3339DateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: 0) 

/* 39 minutes and 57 seconds after the 16th hour of December 19th, 1996 with an offset of -08:00 from UTC (Pacific Standard Time) */ 
let string = "1996-12-19T16:39:57-08:00" 
let date = RFC3339DateFormatter.dateFromString(string) 
+1

Не устанавливайте часовой пояс форматирования. Строка даты имеет часовой пояс, и часовой пояс должен анализироваться из строки. – rmaddy

+0

Да, спасибо за указание @rmaddy – Rajat

+0

Согласен, что настройка часового пояса не требуется, но в то же время она не оказывает неблагоприятного воздействия на форматтер (она всегда будет использовать часовой пояс в строке). И достоинство установки «часового пояса» заключается в том, что этот форматировщик можно также использовать для построения строк даты ISO8601/RFC3339 из объектов даты, и эти строки всегда будут представлены в согласованном формате GMT ​​(что может быть полезно, если вы сохраняете даты в базе данных SQLite). – Rob

0

Неправильная строка формата, плюс вы также должны прочитать Q&A on parsing internet date от Apple:

private static let jsonDateFormatter: NSDateFormatter = { 
    let fmt = NSDateFormatter() 
    fmt.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" 
    fmt.locale = NSLocale(localeIdentifier: "en_US_POSIX") 
    return fmt 
}() 
Смежные вопросы