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。
我建议避免提供自定义格式。 如果可能,尝试使用dateStyle
和timeStyle
。 这将确保所有用户的适应性。
尝试这个
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
在模拟器上检查,在设备上检查……所以,很难说……