Показывать время в 12 и 24-часовом формате в UIDatepicker на основе настроек приложения, а не настроек устройства

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

Пожалуйста, помогите мне. Любые предложения будут высоко оценены!

 Muhammad Asyraf09 апр. 2018 г., 10:51
У меня есть ответ для обхода. вместо того, чтобы менять его через локаль. преобразовать значение после того, как пользователь выбрал.

Ответы на вопрос(8)

Я нашел более простой способ, щелкните инспектор атрибутов UIDatePicker на раскадровке и установите для локали значение «Английский (Европа)». Это убирает переключатель AM / PM и устанавливает время в 24-часовой формат.

 18 февр. 2017 г., 03:03
Хотелось бы, чтобы в этом ответе было больше деталей.

Настройте свой UIDatepicker так, чтобы он имел свойство локали, чтобы он не по умолчанию соответствовал локали пользователя.

Здесьдокументация для этого, и обязательно установитестрана, а не язык.

Изменить: На самом деле, похоже, что язык устарел в iOS 5.0. Я думаю, Apple думала, что люди не должны переопределять это.

 Gypsa22 июн. 2012 г., 08:42
Лоуренс Ву, не могли бы вы предоставить код, потому что я уже пробовал его, он не будет работать.
 22 июн. 2012 г., 08:44
Я больше не уверен, потому что кажется, что свойство locale устарело в последней версии ОС, но посмотрите эти похожие вопросы:stackoverflow.com/questions/6197641/24hr-uidatepicker stackoverflow.com/questions/2648719/…
 Gypsa22 июн. 2012 г., 09:15
извините ссылки бесполезны. Можете ли вы предложить что-то еще.

Если я вас правильно понимаю, вам нужно выяснить, имеет ли формат устройства формат 12 часов или 24 часа. Извините, если это решение немного поздно.

 -(BOOL)returnDefaultDateFormat
   {
       NSString *formatStringForHours = [NSDateFormatter dateFormatFromTemplate:@"j"     options:0 locale:[NSLocale currentLocale]];
       NSRange containsA = [formatStringForHours rangeOfString:@"a"];
       BOOL hasAMPM = containsA.location != NSNotFound;
       return hasAMPM;
}

Easily format the result instead

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

Однако пользователю проще использовать 12-часовой формат, а не 24-часовой. но серверу обычно требуется время в 24-часовом формате.

Поскольку вы упоминаете

not on device Settings

Я могу только предположить, что вы пытаетесь сделать это без прерывания настройки пользователя по умолчанию на телефоне. Но если ваша проблема с видом, то

myDatePicker.locale = NSLocale(localeIdentifier: "en_GB")

это единственный способ сделать это.

What I did was not display it in 24h format but convert the result value to 24h format.

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"
print("\(pickerView.date)") // 10:30 PM
let dateSelect = dateFormatter.string(from: pickerView.date)//pickerView = to your UIDatePicker()
self.tfclosing.text = dateSelect // 22:30

Swift 4 версия ответа ak2g:

// myDatePicker is yourUIDatePicker Outlet
@IBOutlet weak var myDatePicker: UIDatePicker!

// For 24 Hrs 
myDatePicker.locale = Locale(identifier: "en_GB")

//For 12 Hrs
myDatePicker.locale = Locale(identifier: "en_US")

In Swift

    // myDatePicker is yourUIDatePicker Outlet
    @IBOutlet weak var myDatePicker: UIDatePicker!

    // For 24 Hrs 
    myDatePicker.locale = NSLocale(localeIdentifier: "en_GB") as Locale

    //For 12 Hrs
    timePickerView.locale = NSLocale(localeIdentifier: "en_US") as Locale
Решение Вопроса

ЗаUIDatePicker Вы не можете изменить формат времени на 24 или 12, это зависит от локальных настроек пользователя в setting.app

 05 февр. 2016 г., 12:31
Мы можем !.......
 26 авг. 2013 г., 11:04
Можете ли вы предоставить Apple документацию по этому вопросу.
 01 нояб. 2017 г., 11:33
@AlmasAdilbek, что означает, что формат будет основан на назначенном локальном. Проверьтеthis answer.
 01 нояб. 2017 г., 11:24
@AhmadF Commin вернулся с 16. На самом деле, посмотрите на ответ ниже & # x2193 ;, инициализируяNSLocale с идентификатором, скажемkk_Cyrl_KZ вернет 24-часовой формат.
 01 нояб. 2017 г., 09:58
@AlmasAdilbek Не могли бы вы упомянуть, как мы можем ?! это уже упоминалось вUIDatePicker - Интернационализация, что изменение локального будет ограничивать формат.

Попробуйте этот код, чтобы показать 24-часовой формат вDatePicker:

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"NL"];
[self.datePicker setLocale:locale];
 04 апр. 2014 г., 09:18
Отличный ответ! Спасибо!
 09 июл. 2015 г., 12:32
Неверное решение. Это может привести к ошибкам времени на сборщике DateTime, так как сборщик настроен на локаль Нидерландов!
 12 апр. 2015 г., 06:08
Здесь прекрасно работает, но я также хочу знать, почему это так.
 01 сент. 2014 г., 13:17
Это работает для меня, спасибо. Но с чем это связано?
 24 июн. 2014 г., 08:23
Единственный ответ который работает

Ваш ответ на вопрос