NSDateFormatter时间格式取决于Locale

时间:2015-02-25 15:00:19

标签: ios swift nsdateformatter

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

这是我的代码:

extension NSDate {

    func localizedStringTime()->String {

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

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

  

时间的表示可能是13:00。但是,在iOS中,如果是   用户已将24小时时间切换为关闭,时间可能是下午1:00。

我发现它在我的设备上完美运行(我位于欧洲),但它不适用于美国设备和模拟器,即使用户选择12h格式它仍然返回24h格式。 我也尝试将我的Region更改为United States,但是从我的设备上它仍能正常工作。

您认为我的代码有问题吗? 无论如何,这个问题也是

2 个答案:

答案 0 :(得分:8)

您可以使用日期函数中的本地化字符串,如...

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

答案 1 :(得分:3)

斯威夫特3& 4:

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