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

Invalid date after conversion 12h -> 24h

我想将 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 年,但问题仍然存在。

您可以使用 import Foundation 轻松地将其粘贴到 Playground 进行测试。

为什么我弄错了时间?

-- 编辑--

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

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

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

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

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))
}