28

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

请帮我。任何建议将不胜感激!

4

11 回答 11

38

尝试此代码以显示 24 小时格式DatePicker

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"NL"];
[self.datePicker setLocale:locale];
于 2013-02-27T06:52:33.373 回答
31

在斯威夫特

    // 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
于 2015-11-25T09:30:55.063 回答
21

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

于 2012-06-22T06:37:55.297 回答
13

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")
于 2017-12-06T09:20:26.220 回答
11

不需要任何一行代码。我们也可以从 Story Board 设置语言环境,我附上了截图。

在此处输入图像描述

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

dateTimePicker.locale = Locale(identifier: "en_GB")
于 2017-07-22T07:11:52.783 回答
5

只需使用 24 小时格式:

picker.locale = Locale.init(identifier: "en_gb")

对于 12 小时格式:

picker.locale = Locale.init(identifier: "en_us")

为什么这行得通?因为 en_gb 是英式英语,它更喜欢 24 小时格式。你猜对了,en_us 是美式英语,它更喜欢 12 小时格式。

于 2020-04-21T13:56:59.827 回答
4

轻松格式化结果

由于本地设备不在 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
于 2018-04-09T08:43:59.080 回答
3

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

于 2014-09-28T02:34:11.937 回答
2

将您的 UIDatepicker 设置为具有区域设置属性,这样它就不会默认为用户的区域设置。

这是这样做的文档,并确保设置国家,而不是语言

编辑:实际上,看起来语言环境在 iOS 5.0 中被贬低了。我猜苹果认为人们不应该覆盖它。

于 2012-06-22T06:37:32.817 回答
0

我对此有一个答案,您可以在将其设置为 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 格式

于 2021-02-16T13:42:12.950 回答
-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;
}
于 2013-12-12T06:51:19.737 回答