为什么 NSDateFormatter 没有按预期工作?

问题描述 投票:0回答:1

我从日期格式化程序中得到了一些非常奇怪的结果:

let testDate = Date(timeIntervalSinceReferenceDate: 725840000.0)
print(testDate)
2024-01-01 22:13:20 +0000
let fmt = DateFormatter()
fmt.timeZone = TimeZone(abbreviation: "America/Los_Angeles")
fmt.dateFormat = "h:mm a"
print(fmt.string(from: testDate))
14:13 //where's the am/pm, as specified?
fmt.dateFormat = "h:mm a z"
print(fmt.string(from: testDate))
14:13 PM PST //14:13 PM is just wrong!

出现几个问题:

  1. 为什么格式中的 am/pm 只能与时区一起输出,而不是单独输出?
  2. 为什么会出现曾经出现 24 小时时间与 am/pm 一起打印的情况,尽管格式指示 12 小时时间,为什么会出现这种情况?
  3. 我应该使用什么实际格式来获得我想要的内容(在本例中为下午 2:13)?该文档:https://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns
    h:mm a
    是正确的,并且它链接到Apple的文档,所以这是不匹配的在文档和实现之间?
ios swift nsdateformatter date-formatting
1个回答
0
投票

当我想获得 12 小时时间时,尽管设备是 24 或 12,但我遇到了同样的问题 这就是我如何实现它的

let fullDate = NSDate(timeIntervalSince1970: 725840000.0)
let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "HH:mm:ss" // first u format as 24h time
    dateFormatter.locale = Locale(identifier: "en_US_POSIX") // this important
    var time  = fullDate.description.components(separatedBy: " ")[1]
    let time24 = dateFormatter.date(from: time) // get the 24h time
    //now convert to 12H time
    dateFormatter.dateFormat = "h:mm a"
    time = dateFormatter.string(from: time24!)
© www.soinside.com 2019 - 2024. All rights reserved.