Ответ 1
Для UIDatePicker
вы не можете изменить формат времени на 24 или 12, это зависит от локальных настроек пользователя в параметре setup.app
Моя проблема заключается в том, что в моем приложении есть переключатель, который переключается на 12-часовой и 24-часовой формат времени. Я показываю свое время ярлыков в соответствии с этим, но время UIDatePicker
не меняется. Время зависит от формат времени устройства. Можно указать время в UIDatePicker
в соответствии с настройками моего приложения, которые могут отличаться от настроек времени устройства.
Где-то я читал, что UIDatePicker уважает только настройки устройства, но все же я хочу спросить, можно ли показывать время в формате 12 и 24 часа в UIDatePicker
на основе настроек моего приложения.
Пожалуйста, помогите мне. Любые предложения будут высоко оценены!
Для UIDatePicker
вы не можете изменить формат времени на 24 или 12, это зависит от локальных настроек пользователя в параметре setup.app
Попробуйте этот код, чтобы показать 24-часовой формат в 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, чтобы он не был по умолчанию для пользовательской локали.
Ниже приведена documentation и убедитесь, что вы устанавливаете страну а не на языке.
Изменить: На самом деле, похоже, что локаль обесценивается в iOS 5.0. Я думаю, Apple думала, что люди не должны ее переоценивать.
Я нашел более простой способ, щелкнул инспектор атрибутов UIDatePicker на раскадровке и установил локаль в "Английский (Европа)". Это заставляет AM/PM переключать и устанавливает время в 24-часовой формат.
Нет необходимости в какой-либо отдельной строке кода. Вы можете установить языковой стандарт из Story Board и прикрепить скриншот
И для этого программно в swift 3.0 мы также можем сделать
dateTimePicker.locale = Locale(identifier: "en_GB")
Легко форматировать результат вместо
Поскольку локальное устройство не находится в течение 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
Если вы правильно поняли, вам нужно выяснить, имеет ли настройки устройства 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;
}