Показать время в 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-часовой формат.
нет необходимости в какой-либо одной строке кода Вы можете установить локаль из раскадровки также я прикрепляю скриншот
и к этому программно в 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;
}