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

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

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

9 ответов


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


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

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

В 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

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

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

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

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


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


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

enter image description here

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

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

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

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

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

Так как вы упомянули

не в настройках устройства

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

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

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

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

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

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