У меня есть проблема. Я получаю входящие строки времени в 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, там, кажется, не очевидный способ, чтобы сделать это.
Не уверен, что он вам все еще нужен, но у меня была аналогичная проблема, которая была решена установкой локали для средства форматирования даты. То есть, если вы хотите принудительно переключить его в 12-часовой режим, независимо от настройки 24/12 часового режима пользователя, вы должны установить локаль на en_US_POSIX.
Я считаю, что @ "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
.
Хорошо, я оставил комментарий, но он сжал весь код вместе, так что мне придется "ответить" на свой вопрос комментарием:
Спасибо. Я дал ему вихрь с этим кодом:
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];
И дата на ноль. Я столкнулся с этим раньше, когда попробовал этот маршрут, и он не работает. Очень расстраивает.