转换12h后的日期无效 - > 24小时

时间:2016-08-23 13:30:29

标签: ios swift nsdateformatter

我想将AM / PM时间转换为24小时。这应该是微不足道的...但是我反对一个奇怪的问题:

let inputDateString = "11:05:45PM"

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "HH:mm:ssa"
let inputDate = dateFormatter.dateFromString(inputDateString) // "Jan 1, 2000, 12:05 PM" ???

if let inputDate = inputDate {
    dateFormatter.dateFormat = "HH:mm:ss"
    print(dateFormatter.stringFromDate(inputDate))
}
  1. 我想也许它可能会使用一些奇怪的时区来转换时间。所以我尝试添加systemLocale或GB语言环境,但这并没有帮助。
  2. 然后我想出了这个想法,也许它不能在01.01.2000 12:00:00之前设定日期(没有意义,因为它应该至少从一年起工作〜 1970年)。因此,我已将日期,月份等添加到2005年,但问题仍然存在。
  3. 您可以使用import Foundation轻松将其粘贴到Playground以进行测试。

    为什么我出错了?

    - 编辑 -

    如果您将inputDateString更改为"01:05:45PM"之类的任何其他小时,inputDate将是相同的:/但如果您更改分钟或秒,则相应地更新。

2 个答案:

答案 0 :(得分:2)

您需要将dateFormat更改为"hh:mm:ssa",因为小写h表示输入时间为12小时格式。

DateFormatter使用Unicode标准进行格式化,因此它使用the Unicode Documentation中的值(适用于macOS 10.9和iOS 7及更高版本,截至08/2016)。

http://nsdateformatter.com上可以找到更易于使用的参考。

答案 1 :(得分:0)

let inputDateString = "11:05:45PM"

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "HH:mm:ssa" // Here, change the format string to "hh:mm:ssa"
let inputDate = dateFormatter.dateFromString(inputDateString) // "Jan 1, 2000, 12:05 PM" ???

if let inputDate = inputDate {
    dateFormatter.dateFormat = "HH:mm:ss"
    print(dateFormatter.stringFromDate(inputDate))
}