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