Вопрос по ios, iphone, time-format, uidatepicker, objective-c – Показывать время в 12 и 24-часовом формате в UIDatepicker на основе настроек приложения, а не настроек устройства

22

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

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

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

Ваш Ответ

8   ответов
2

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

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

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

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

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

Хотелось бы, чтобы в этом ответе было больше деталей.
7

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

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
14

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

Можете ли вы предоставить Apple документацию по этому вопросу.
@AlmasAdilbek, что означает, что формат будет основан на назначенном локальном. Проверьтеthis answer.
Мы можем !.......
@AhmadF Commin вернулся с 16. На самом деле, посмотрите на ответ ниже & # x2193 ;, инициализируяNSLocale с идентификатором, скажемkk_Cyrl_KZ вернет 24-часовой формат.
@AlmasAdilbek Не могли бы вы упомянуть, как мы можем ?! это уже упоминалось вUIDatePicker - Интернационализация, что изменение локального будет ограничивать формат.
-1

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

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
36

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

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"NL"];
[self.datePicker setLocale:locale];
Неверное решение. Это может привести к ошибкам времени на сборщике DateTime, так как сборщик настроен на локаль Нидерландов!
Единственный ответ который работает
Отличный ответ! Спасибо!
Это работает для меня, спасибо. Но с чем это связано?
Здесь прекрасно работает, но я также хочу знать, почему это так.

Похожие вопросы