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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"NL"];
[self.datePicker setLocale:locale];

Ответ 3

В 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

Ответ 4

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")

Ответ 5

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

Ниже приведена documentation и убедитесь, что вы устанавливаете страну а не на языке.

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

Ответ 6

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

Ответ 7

Нет необходимости в какой-либо отдельной строке кода. Вы можете установить языковой стандарт из Story Board и прикрепить скриншот

введите описание изображения здесь

И для этого программно в swift 3.0 мы также можем сделать

dateTimePicker.locale = Locale(identifier: "en_GB")

Ответ 8

Легко форматировать результат вместо

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

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

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

не на устройстве Настройки

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

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

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

То, что я сделал, не отображалось в формате 24h, а конвертировало значение результата в 24-часовой формат.

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

Ответ 9

Если вы правильно поняли, вам нужно выяснить, имеет ли настройки устройства 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;
}