2013-06-29 3 views
1

Итак, у меня есть приложение, в котором некоторые данные возвращаются из веб-службы, и соответственно корректируется UIDatePicker. Дата возвращается в следующем формате:Установка 24-часового времени в 12 часов UIDatePicker

12-05-2013 16:05 (dd-mm-yyyy hh:mm) 

Время хранится в 24-часовом формате, однако UIDatePicker либо 12 час или 24 часа в зависимости от параметров на устройстве. Данные поступают в массив JSON и являются ключевым подом. Выбор даты, которую я устанавливаю, называется potddatepicker.

NSDateFormatter *inputFormat = [[NSDateFormatter alloc] init]; 
[inputFormat setDateFormat:@"dd-MM-yyy hh:mm"]; 
NSDate *inputDate = [inputFormat dateFromString: [jsonObjects objectForKey:@"potdd"]]; 

NSDate *potdd = inputDate; 
[_potddatepicker setDate:potdd]; 

Если дата установлена ​​до 12:00, она работает нормально. Если же дата-магазин в 24 час времени после 12, то он падает со следующим исключением:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: date' 

я не особо хочу, чтобы заставить время в 12-часовом формате только для DatePicker, а затем заставить его обратно в течение 24 часов, когда он появляется, потому что у некоторых местных жителей он может использоваться в 24-часовой выбор времени. Кто-нибудь знает, как я могу справиться с этим? Я не могу изменить формат, который время хранится в базе данных.

Спасибо!

+0

Вы проверили 'inputDate', чтобы узнать, есть ли у него значение, которое вы ожидаете? –

+0

@GradyPlayer Проблема с ответом на этот дубликат - это неправильно. См. Комментарии ниже этого ответа. Вот почему я указал на необходимость использования специального языка 'en_US_POSIX' в моем ответе на этот вопрос. – rmaddy

+0

@rmaddy форматировщик op немного слабее, но главная точка h vs H такая же. –

ответ

7

Ваша ошибка не имеет ничего общего с выбором даты.

Вы используете неподходящий формат даты для разбора строки. Вам нужно:

[inputFormat setDateFormat:@"dd-MM-yyyy HH:mm"]; // HH is 24-hour, hh is 12-hour 

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

3

Я подозреваю, что вы просто хотите HH вместо hh в вашем формате ввода. HH - 24 час, hh - 12 час. Я подозреваю, что вы также хотите MM вместо первых mm. (MM это две цифры месяца спецификатор; mm является две цифры минуту спецификатор Вы не хотите, чтобы установить минуты дважды.!)

Таким образом, значение 12-05-2013 16:05 недопустим для формата dd-mm-yyyy hh:mm - но это действует для dd-MM-yyyy HH:mm.

Для получения дополнительной информации см. Документацию Unicode Date Format Patterns. В основном вам нужно быть осторожным, чтобы ваш шаблон соответствовал вашим входным данным. Я хотел бы надеяться, что настройки пользовательского интерфейса сборщика не зависят от вашего формата ввода данных JSON, но я недостаточно уверен в развитии iOS, чтобы сказать наверняка.

+1

сборщик даты вернет NSDate, который в основном представляет собой оболочку Obj-C для «двойной» секунды с момента ссылки и не имеет ничего общего с форматированным представлением, поэтому да, они полностью разделены. –

+0

@GradyPlayer: Вот что я надеялся :) –

Смежные вопросы