2013-11-25 3 views
0

У меня проблема только с некоторыми устройствами NSDateFormatter, возвращающая нуль, формат даты с сервера «13:05, 10 ноября 2013».NSDateFormatter, возвращающий нуль на некоторых устройствах

NSDate *Now = [NSDate serverDate]; 
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"HH:mm, d MMM yyyy"]; 
    NSDate *LastLogin = [dateFormat dateFromString:DateString]; 

На тренажере и несколько устройств работает

LastLogin 2013-10-05 00:36:00 +0000 | Теперь 2013-11-25 14:50:51 +0000

, но на некоторых устройствах

LastLogin (нуль) | Теперь 2013-11-25 15:00:22 +0000

+0

Устройства, с которыми у вас возникли проблемы, скорее всего, имеют время 12/24 времени, отличное от того, что определяет локаль. Это провоцирует «платную» (т.е. документированную ошибку) в iOS. Чтобы обойти это, установите локаль в нечто вроде «en_US_POSIX». См. [Эту тему] (http://stackoverflow.com/questions/6613110/what-is-the-best-way-to-deal-with-nsdateformatter-locale-feature). –

ответ

3

Проблема, кажется, с локалью, просто установить региональные настройки для форматере:

NSDate *Now = [NSDate serverDate]; 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
dateFormat.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 
[dateFormat setDateFormat:@"HH:mm, d MMM yyyy"]; 
NSDate *LastLogin = [dateFormat dateFromString:DateString]; 
+0

Спасибо, хороший сэр, и у меня хороший день :) Я помету ваши ответы, потому что вы были первыми. –

+0

@ KrisGeorgiev спасибо) тоже большой день –

3

Если вы не установки определенного языкового стандарта, числа и даты могут анализироваться по-разному даже с фиксированными форматами дат.

The docs имейте это в виду;

Если вы работаете с датами фиксированного формата, вы должны сначала установить языковой формат форматирования даты на то, что подходит для вашего фиксированного формата. В большинстве случаев лучшим выбором языка является en_US_POSIX, локаль, специально разработанная для получения результатов на английском языке, независимо от пользовательских и системных предпочтений.

Продвинутый пользовательский код;

NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
NSDate *Now = [NSDate serverDate]; 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setLocale:enUSPOSIXLocale]; 
[dateFormat setDateFormat:@"HH:mm, d MMM yyyy"]; 
NSDate *LastLogin = [dateFormat dateFromString:DateString]; 
Смежные вопросы