根据不在设备设置上的应用设置,在UIDatepicker中以12和24小时格式显示时间

问题描述 投票:22回答:9

我的问题是我的应用程序中有一个切换,切换12小时和24小时时间格式。我正在显示我的标签时间,但UIDatePicker时间没有改变。它的时间取决于设备时间设置格式。是否可以根据我的应用程序设置在UIDatePicker中显示时间,这可能与设备时间设置不同。在某处我读到UIDatePicker仅尊重设备设置,但我仍想询问是否可以根据我的应用程序设置在UIDatePicker中显示12和24小时格式的时间。

请帮我。任何建议都将受到高度赞赏!

iphone objective-c ios uidatepicker time-format
9个回答
16
投票

对于UIDatePicker,您无法将时间格式更改为24或12,这取决于setting.app中的用户本地设置


36
投票

试试这段代码在DatePicker中显示24小时格式:

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"NL"];
[self.datePicker setLocale:locale];

24
投票

在斯威夫特

    // 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

9
投票

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

7
投票

不需要任何单一的代码行。我们也可以从Story Board设置区域设置,我已附上截图。

enter image description here

要以编程方式执行此操作,我们还可以编写以下代码。

dateTimePicker.locale = Locale(identifier: "en_GB")

3
投票

我找到了一种更简单的方法,单击故事板上的UIDatePicker属性检查器,并将语言环境设置为“英语(欧洲)”。这会消除AM / PM切换并将时间设置为24小时格式。


2
投票

将UIDatepicker设置为具有区域设置属性,以使其不默认为用户的区域设置。

这是documentation这样做,并确保设置country, not the language

编辑:实际上,看起来在iOS 5.0中不推荐使用locale。我猜Apple认为人们不应该覆盖它。


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

-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;
}
© www.soinside.com 2019 - 2024. All rights reserved.