Swift 在设备上将 NSDate 转换为 24h 格式失败
Swift converting NSDate to 24h Format fails on 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 个问题后编辑]
在模拟器上 returns 24 小时格式的日期(右)。
在设备上 returns 12h 格式化日期(错误)。
Apple 的开发人员库中有一个示例可能与您的案例相关。
The representation of the time may be 13:00. In iOS, however, if the user has switched 24-Hour Time to Off, the time may be 1:00 pm.
我建议避免提供自定义格式。如果可能,请尝试使用 dateStyle
和 timeStyle
。这将确保您所有用户的适应性。
QA1480:将自己设置为 en_US_POSIX
的格式化程序语言环境。否则您设备的区域设置将影响日期模式。
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
在模拟器上检查过,在设备上检查过……所以,很难说……
试试这个
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 你可以传递 nil 以便使用国际格式
var time = time.descriptionWithLocale(nil)
print(time) // 2015-10-30 14:12:18 +0100
当我 运行 在我的 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 个问题后编辑]
在模拟器上 returns 24 小时格式的日期(右)。
在设备上 returns 12h 格式化日期(错误)。
Apple 的开发人员库中有一个示例可能与您的案例相关。
The representation of the time may be 13:00. In iOS, however, if the user has switched 24-Hour Time to Off, the time may be 1:00 pm.
我建议避免提供自定义格式。如果可能,请尝试使用 dateStyle
和 timeStyle
。这将确保您所有用户的适应性。
QA1480:将自己设置为 en_US_POSIX
的格式化程序语言环境。否则您设备的区域设置将影响日期模式。
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
在模拟器上检查过,在设备上检查过……所以,很难说……
试试这个
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 你可以传递 nil 以便使用国际格式
var time = time.descriptionWithLocale(nil)
print(time) // 2015-10-30 14:12:18 +0100