我的问题是我的应用程序中有一个开关可以切换 12 小时和 24 小时时间格式。我正在根据它显示我的标签时间,但UIDatePicker
时间没有改变。时间取决于设备时间设置格式。是可以根据我的应用程序设置显示时间,UIDatePicker
这可能与设备时间设置不同。在某处我读到 UIDatePicker 仅尊重设备设置,但我仍然想问是否可以UIDatePicker
根据我的应用设置以 12 和 24 小时格式显示时间。
请帮我。任何建议将不胜感激!
我的问题是我的应用程序中有一个开关可以切换 12 小时和 24 小时时间格式。我正在根据它显示我的标签时间,但UIDatePicker
时间没有改变。时间取决于设备时间设置格式。是可以根据我的应用程序设置显示时间,UIDatePicker
这可能与设备时间设置不同。在某处我读到 UIDatePicker 仅尊重设备设置,但我仍然想问是否可以UIDatePicker
根据我的应用设置以 12 和 24 小时格式显示时间。
请帮我。任何建议将不胜感激!
尝试此代码以显示 24 小时格式DatePicker
:
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"NL"];
[self.datePicker setLocale:locale];
在斯威夫特
// 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
因为UIDatePicker
您不能将时间格式更改为 24 或 12,这取决于 setting.app 中的用户本地设置
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 小时格式:
picker.locale = Locale.init(identifier: "en_gb")
对于 12 小时格式:
picker.locale = Locale.init(identifier: "en_us")
为什么这行得通?因为 en_gb 是英式英语,它更喜欢 24 小时格式。你猜对了,en_us 是美式英语,它更喜欢 12 小时格式。
轻松格式化结果
由于本地设备不在 24 小时内。选择12h格式的时间没有问题。主要是当您尝试向服务器提交时间时会出现此问题。以及服务器以 24 小时格式请求它。
然而,对于用户来说,用户更容易使用 12h 格式而不是 24h 格式。但服务器通常需要时间为 24 小时格式。
既然你提到
不在设备设置上
我只能假设您正在尝试在不中断电话上的用户默认设置的情况下实现这一点。但是,如果您的问题与视图有关,那么
myDatePicker.locale = NSLocale(localeIdentifier: "en_GB")
是唯一的方法。
我所做的不是以 24 小时格式显示,而是将结果值转换为 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
我找到了一种更简单的方法,单击情节提要上的 UIDatePicker 属性检查器,并将语言环境设置为“英语(欧洲)”。这将取消 AM/PM 切换并将时间设置为 24 小时格式。
我对此有一个答案,您可以在将其设置为 datePicker 之前自定义语言环境。
语言环境包括 (language_region)
extension UIDatePicker {
internal func setLocale() {
guard let countryCode = (Locale.current as NSLocale).object(forKey: .countryCode) as? String else {
self.locale = LanguageManager.shared.appLocale
return
}
self.locale = Locale(identifier: "\(LanguageManager.shared.appLocale.identifier)_\(countryCode)")
}
}
其中 LanguageManager.shared.appLocale.identifier 是选择使用的语言代码(en、ar、fr 等...)
并像使用它一样
let datePicker = UIDatePicker()
datePicker.setLocale()
它将导致语言环境,例如“fr_US”,而美国是设备国家地区,因此如果用户将应用程序语言更改为法语,例如它将使用美国地区,因此它将采用 12h 格式,尽管“fr”仅使用 24h 格式
如果我理解正确,您需要确定设备设置是 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;
}