Swift将NSDate转换为24h格式在设备

时间:2015-10-31 11:36:23

标签: ios swift nsdate nsdateformatter

当我在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 提前感谢您的回答!

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

4 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:2)

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。这将确保所有用户的适应性。

答案 2 :(得分:-1)

试试这个

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

比U可以像这样调用函数

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

答案 3 :(得分:-3)

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

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