将完整日期转换为几小时和几分钟 - 斯威夫特

时间:2018-03-11 22:45:19

标签: ios swift nsdate

我想在这里做一些非常简单的事情并且悲惨地失败。我只想将一个完整日期的字符串转换为小时和分钟,有人能看到我错在哪里吗?以下代码打印nil

let dateString2 = "2018-03-11 20:43:05 +0000"

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss +zzzz"
dateFormatter.locale = Locale.init(identifier: "en_GB")


let dateObj = dateFormatter.date(from: dateString2)

dateFormatter.dateFormat = "hh:mm"
print("Dateobj: \(dateFormatter.string(from: dateObj!))")

2 个答案:

答案 0 :(得分:3)

小时需要HH(24小时),而不是hh(12小时)。您还需要使用en_US_POSIX的特殊区域设置,而不是en_GB。您还应该使用Z作为时区,而不是+zzzz

let dateString2 = "2018-03-11 20:43:05 +0000"

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")


if let dateObj = dateFormatter.date(from: dateString2) {
    dateFormatter.dateFormat = "HH:mm" // or "hh:mm a"
    print("Dateobj: \(dateFormatter.string(from: dateObj))")
}

答案 1 :(得分:2)

您的dateFormat字符串存在缺陷。 hh是12小时的时间格式,当您明确收到24小时时间格式时,您需要使用HH。尽管zzzz有效,但+ 00实际上应由z表示。在大多数情况下使用固定时间格式时,您还应将locale设置为en_US_POSIX

let dateString2 = "2018-03-11 20:43:05 +0000"

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss z"
dateFormatter.locale = Locale.init(identifier: "en_US_POSIX")

let dateObj = dateFormatter.date(from: dateString2)
dateFormatter.dateFormat = "HH:mm"
print("Dateobj: \(dateFormatter.string(from: dateObj!))")

输出:

  

20时43分