NSDateFormatter 时间格式取决于 Locale

NSDateFormatter time format depending on Locale

我遇到了一个非常奇怪的问题,听起来更像是系统错误。 我想仅使用小时和分钟信息来格式化日期,并在必要时显示 AM/PM。

这是我的代码:

extension NSDate {

    func localizedStringTime()->String {

        let dateFormatter = NSDateFormatter()
        dateFormatter.locale = NSLocale.currentLocale()
        dateFormatter.dateFormat = "HH:mm"
    }
}

如您所见,我使用的是 HH 而不是 hh 并且如 Apple 文档所述,如果用户选择 12h 格式,它应该自动添加 AM/PM:

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.

我发现它在我的设备(我在欧洲)上运行良好,但在美国设备和模拟器上不起作用,即使用户选择 12h 格式,它仍然返回 24h 格式。 我也曾尝试将我的地区更改为美国,但在我的设备上它仍然可以正常工作。

你发现我的代码有什么问题吗? 反正这个问题也是

您可以像这样使用日期函数中的本地化字符串...

extension NSDate {
    func localizedStringTime()->String {
        return NSDateFormatter.localizedStringFromDate(self, dateStyle: NSDateFormatterStyle.NoStyle, timeStyle: NSDateFormatterStyle.ShortStyle)
    }
}

Swift 3 & 4:

extension Date {
  var localizedStringTime: String {
    return DateFormatter.localizedString(from: self, dateStyle: .none, timeStyle: .short)
  }
}