NSDateFormatter dateFromString и iPhone в 24-часовом Беспорядке Формата

У меня есть проблема. Я получаю входящие строки времени в 12-часовом формате, и я превращаю их в объекты NSDate. Когда iPhone находится в 12-часовом формате, без проблем. Но когда это находится в 24-часовом формате, вещи идут не так, как надо. Вот некоторый пример кода для демонстрации:

NSString *theTime = @"3:19 PM";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"h:mm a"]; // "3:19 PM"
NSDate *date = [formatter dateFromString:theTime];
NSString *theString = [formatter stringFromDate:date];

В 24-часовом режиме дата 01.01.1970 3:19:00, и контрольное кольцо "3:19" - НЕПРАВИЛЬНО

В 12-часовом режиме дата 01.01.1970 15:19:00, и контрольное кольцо является "15:19" - ПРАВО

Так... вопрос 1: почему 24-часовая установка устройства переопределяет мой параметр средства форматирования даты?

и что еще более важно, вопрос 2: Как я получаю надлежащее преобразование с 12-часового времени до 24-часового времени?

У меня уже есть код, чтобы обнаружить, если телефон находится в 24-часовом режиме, но кроме рытья вокруг в строке и свопинге 3 с 15, там, кажется, не очевидный способ, чтобы сделать это.

25
задан AstroCB 15 August 2014 в 15:02
поделиться

3 ответа

Не уверен, что он вам все еще нужен, но у меня была аналогичная проблема, которая была решена установкой локали для средства форматирования даты. То есть, если вы хотите принудительно переключить его в 12-часовой режим, независимо от настройки 24/12 часового режима пользователя, вы должны установить локаль на en_US_POSIX.

29
ответ дан 28 November 2019 в 20:36
поделиться
[11182379-

Я считаю, что @ "h: мм a" должен быть @ "hh: мм a".

Если вы используете предварительную конструкцию DateFormatter в какао, все будет позаботиться о вас.

NSDateFormatter *timeFormatter = [[[NSDateFormatter alloc] init] autorelease];
[timeFormatter setTimeStyle:NSDateFormatterShortStyle];
[timeFormatter setDateStyle:NSDateFormatterNoStyle];

NSDateFormattershortstyle и NSDateFormatternostyle поставляется в разных сортах. Использование тем убедитесь, что вы уважаете настройки, которые пользователь выбрал для дат и времени.

12-14-часовые часы преобразования уход за SDK, если у вас есть модель или некоторые значения для хранения ваших дат, попробуйте сохранить их как NSDate . Таким образом, вы можете отформатировать их только тогда, когда вам нужно их отображать. Спасение даты в качестве струн могут открыть мир неприятностей, когда вы, возможно, анализируете их от XML, где GMT ​​указывается отдельно или пытается добавить и вычесть NstimeIntervals .

6
ответ дан 28 November 2019 в 20:36
поделиться

Хорошо, я оставил комментарий, но он сжал весь код вместе, так что мне придется "ответить" на свой вопрос комментарием:

Спасибо. Я дал ему вихрь с этим кодом:

NSString *theTime = @"3:19 PM"; 
NSDateFormatter *timeFormatter = [[[NSDateFormatter alloc] init] autorelease];       
[timeFormatter setTimeStyle:NSDateFormatterShortStyle]; 
[timeFormatter setDateStyle:NSDateFormatterNoStyle]; 
NSDate *date = [timeFormatter dateFromString:theTime]; 
NSString *theString = [timeFormatter stringFromDate:date]; 

И дата на ноль. Я столкнулся с этим раньше, когда попробовал этот маршрут, и он не работает. Очень расстраивает.

1
ответ дан 28 November 2019 в 20:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: