Swift将NSDate转换为24h格式在Device上失败

当我在iPhone6上运行我的应用程序时,我遇到了一个恼人的错误。
我需要将一小时(由datePicker选取)从12h转换为24h格式。
简单的事! 是的,我很确定这一点但是…我的代码在模拟器上运行但在设备上运行。
代码如下:

func convertTimeTo24HoursFomratString() -> String { let dateFormatter = NSDateFormatter() // isFormatTime24Hours is a static function that returns me if the device has a 24h clock or not. It works fine both on device and on simulator //if NSDateUtility.isFormatTime24Hours() { // dateFormatter.dateFormat = "h:mm a" // return dateFormatter.stringFromDate(self) //} dateFormatter.dateFormat = "HH:mm" return dateFormatter.stringFromDate(self) } 

我哪里做错了?
iOS版本到处都是9.1。
提前感谢您的回答!

[Paul.s问题后的编辑]
在模拟器上,它返回24小时格式化日期(右)。
在设备上它返回12h格式化日期(错误)。

QA1480 :将自己设置为en_US_POSIX格式化程序的语言环境。 否则,设备的区域设置将影响日期模式。

Apple的开发人员库中有一个可能与您的案例有关的示例。

时间的表示可能是13:00。 但是,在iOS中,如果用户将24小时时间切换为关闭,则时间可能是下午1:00。

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369-SW1

我建议避免提供自定义格式。 如果可能,尝试使用dateStyletimeStyle 。 这将确保所有用户的适应性。

尝试这个

 lazy var dateFormatter: NSDateFormatter = { let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "dd-MM-yyyy HH mm" return dateFormatter }() 

比你可以这样调用这个函数

 let dateYour = YourTextField.text date = dateFormatter.dateFromString(dateYour!)! 

要么

 var date : NSDate let dateYour2 = dateFormatter.stringFromDate(date) 

无论如何,因为IOS9 U可以传递nil以便使用国际格式

 var time = time.descriptionWithLocale(nil) print(time) // 2015-10-30 14:12:18 +0100 
 let date = NSDate() // 31 Oct 2015 14:04 let formater = NSDateFormatter.init() formater.setLocalizedDateFormatFromTemplate("HH:mm") formater.stringFromDate(date) // 14:04 formater.setLocalizedDateFormatFromTemplate("hh:mm") formater.stringFromDate(date) // 2:12 PM formater.dateFormat = "HH:mm" formater.stringFromDate(date) // 14:04 formater.dateFormat = "hh:mm" formater.stringFromDate(date) // 02:04 

在模拟器上检查,在设备上检查……所以,很难说……

Interesting Posts