Подтвердить что ты не робот

NSDateFormatter в 12-часовом режиме

У меня есть следующий код.

NSDateFormatter *df = ...;
[df setTimeZone:[NSTimeZone defaultTimeZone]];
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"];
NSDate * date = [df dateFromString:date_string]; //here is the problem

В 24-часовом режиме все в порядке. Когда на устройстве установлен 12-часовой режим, stringFromDate возвращает значение null. Формат date_string одинаковый все время, формат даты тоже. Почему это происходит?

4b9b3361

Ответ 1

Попробуйте установить локаль таким образом:

NSLocale *twelveHourLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
df.locale = twelveHourLocale;

Чтобы принудительно использовать 24 часа, вы можете использовать:

NSLocale *twentyFour = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];

Ответ 2

В вашем NSDateFormatter "yyyy-MM-dd'T'HH:mm:ss.SSSZZZ" HH стоит 24 часа, а HH - 12 часов

Ответ 3

12-часовой режим до 24-часового режима:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"hh:mm a"];
NSDate *amPmDate = [formatter dateFromString:amPmHourString];
[formatter setDateFormat:@"HH:mm"];
NSString *24HourString = [formatter stringFromDate:amPmDate]];

Для 24-часового режима до 12-часового режима просто делайте противоположное

Ответ 4

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
NSLocale *locale = [[[NSLocale alloc] 
                initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];  
[dateFormat setLocale:locale];