2015-01-28 6 views
0

Я создал NSDateFormatter, но иногда он создает NSDate из данной строки, иногда это не на одном устройстве (Simulator).NSDateFormatter возвращает nil иногда

Это мой код:

NSString *lastModifiedString = [metaData objectForKey:@"Last-Modified"]; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"EEE, dd MMM yyyy hh:mm:ss Z"]; 
    NSDate *onlineModDate = [dateFormatter dateFromString:lastModifiedString]; 

Для примера для строки "Пт, 9 января 2015 15:08:01 GMT" возвращает ноль, но для «Пт, 12 декабря 2014 9:15: 52 GMT "он возвращает правильный NSDate.

Я попытался добавить скобки к dateformat, и я попытался установить locale на «en_US_POSIX», и я попробовал немного z вместо большого, но ни один из них не работал.

Что я делаю неправильно? Спасибо за вашу помощь.

+0

Просто догадка: Он разбирает 12 : 59: 59 ОК, но не работает 13:00:00. Что между этими двумя? –

+0

Ссылка на эту ссылку: http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns –

+2

проблема 'hh', потому что указывает час в 12-часовом формате. Следовательно, 15 недействительно. Используйте 'HH', который используется для 24-часового формата. –

ответ

3

NSDateFormatter следует за Unicode standard for date and time patterns. Используйте «H» в течение часа на 24-часовой:

Так что в вашем коде, правильный путь должен быть:

NSString *lastModifiedString = [metaData objectForKey:@"Last-Modified"]; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss Z"]; 
    NSDate *onlineModDate = [dateFormatter dateFromString:lastModifiedString]; 
Смежные вопросы