我的问题是我的应用程序中有一个切换,切换12小时和24小时时间格式。我正在显示我的标签时间,但UIDatePicker
时间没有改变。现在是时候了取决于设备时间设置格式。可以根据我的应用设置在UIDatePicker
中显示时间,这可能与设备时间设置不同。
在某处我读到UIDatePicker仅尊重设备设置,但我仍然想询问是否可以根据我的应用设置在UIDatePicker
中以12小时和24小时格式显示时间。
请帮帮我。 任何建议都将受到高度赞赏!
答案 0 :(得分:36)
尝试使用此代码在DatePicker
中显示24小时格式:
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"NL"];
[self.datePicker setLocale:locale];
答案 1 :(得分:24)
在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
答案 2 :(得分:15)
对于UIDatePicker
,您无法将时间格式更改为24或12,具体取决于setting.app中的用户本地设置
答案 3 :(得分:9)
快速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")
答案 4 :(得分:7)
不需要任何单一的代码行。我们也可以从Story Board设置语言环境,我附上了截图。
https://www.manning.com/books/camel-in-action-second-edition
要以编程方式执行此操作,我们还可以编写以下代码。
dateTimePicker.locale = Locale(identifier: "en_GB")
答案 5 :(得分:3)
我找到了一种更简单的方法,点击故事板上的UIDatePicker属性检查器,并将语言环境设置为“英语(欧洲)”。这会消除AM / PM切换并将时间设置为24小时格式。
答案 6 :(得分:3)
只需使用, 对于24小时格式:
picker.locale = Locale.init(identifier: "en_gb")
12小时格式:
picker.locale = Locale.init(identifier: "en_us")
为什么行得通?因为en_gb用于英式英语,所以它首选24小时格式。您猜对了,en_us适用于喜欢12小时制的美国英语。
答案 7 :(得分:2)
将您的UIDatepicker设置为具有区域设置属性,因此它不会默认为用户的区域设置。
这样做documentation,并确保设置country, not the language。
编辑:实际上,在iOS 5.0中看起来区域设置已被折旧。我猜Apple认为人们不应该覆盖它。
答案 8 :(得分:2)
轻松格式化结果
由于本地设备不在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
答案 9 :(得分:0)
我有一个答案 您可以在将其设置为 datePicker 之前自定义区域设置。
locale 由 (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” US 是设备国家/地区,因此如果用户将应用语言更改为法语,例如它将使用美国地区,因此它将使用 12 小时格式,尽管“fr”只会使用 24 小时格式
答案 10 :(得分:-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;
}