Swift - 将 JSON 日期转换为 Swift 兼容日期
Swift - Converting JSON date to Swift compatible date
我正在尝试转换 javascript 代码使用 Date() 函数生成当前日期的日期。但是当我打印出来时,我得到的是零。
我的代码:
let date2 = data?[0] as! String
println(date2)
var str = "2013-07-21T19:32:00Z"
var dateFor: NSDateFormatter = NSDateFormatter()
dateFor.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
var Date: NSDate? = dateFor.dateFromString(date2)
println(Date)
date2 => 正在打印 2015-05-15T21:58:00.066Z
日期 => 正在打印 nil
str 仅用于测试并完美运行。
有人看到代码中的任何缺陷吗?
问题是 str
和 date2
两者的日期格式不同。 str
格式为 "yyyy-MM-dd'T'HH:mm:ssZ"
而 date2
格式为 "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
。除此之外,在解析固定格式日期时,您应该始终将 dateFormatter 的语言环境设置为 "en_US_POSIX"
:
let date2 = "2015-05-15T21:58:00.066Z"
let dateFormatter = DateFormatter()
dateFormatter.locale = .init(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
if let date = dateFormatter.date(from: date2) {
print(date) // "2015-05-15 21:58:00 +0000"
}
Swift 4+
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
let str = "2013-07-21T19:32:00Z"
if let date = dateFormatter.date(from: str) {
print(date)
}
输出: 2013-07-21 19:32:00 +0000
以后每 documentation 使用 ISO8601DateFormatter
In macOS 10.12 and later or iOS 10 and later, use the
ISO8601DateFormatter class when working with ISO 8601 date
representations.
import Foundation
let isoStr = "2020-02-18T11:40:01.000Z"
let isoDateFormatter = ISO8601DateFormatter()
isoDateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
isoDateFormatter.formatOptions = [
.withFullDate,
.withFullTime,
.withDashSeparatorInDate,
.withFractionalSeconds]
if let isoDateFormatted = isoDateFormatter.date(from: isoStr) {
print(isoDateFormatted)
}
我正在尝试转换 javascript 代码使用 Date() 函数生成当前日期的日期。但是当我打印出来时,我得到的是零。
我的代码:
let date2 = data?[0] as! String
println(date2)
var str = "2013-07-21T19:32:00Z"
var dateFor: NSDateFormatter = NSDateFormatter()
dateFor.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
var Date: NSDate? = dateFor.dateFromString(date2)
println(Date)
date2 => 正在打印 2015-05-15T21:58:00.066Z 日期 => 正在打印 nil str 仅用于测试并完美运行。
有人看到代码中的任何缺陷吗?
问题是 str
和 date2
两者的日期格式不同。 str
格式为 "yyyy-MM-dd'T'HH:mm:ssZ"
而 date2
格式为 "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
。除此之外,在解析固定格式日期时,您应该始终将 dateFormatter 的语言环境设置为 "en_US_POSIX"
:
let date2 = "2015-05-15T21:58:00.066Z"
let dateFormatter = DateFormatter()
dateFormatter.locale = .init(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
if let date = dateFormatter.date(from: date2) {
print(date) // "2015-05-15 21:58:00 +0000"
}
Swift 4+
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
let str = "2013-07-21T19:32:00Z"
if let date = dateFormatter.date(from: str) {
print(date)
}
输出: 2013-07-21 19:32:00 +0000
以后每 documentation 使用 ISO8601DateFormatter
In macOS 10.12 and later or iOS 10 and later, use the ISO8601DateFormatter class when working with ISO 8601 date representations.
import Foundation
let isoStr = "2020-02-18T11:40:01.000Z"
let isoDateFormatter = ISO8601DateFormatter()
isoDateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
isoDateFormatter.formatOptions = [
.withFullDate,
.withFullTime,
.withDashSeparatorInDate,
.withFractionalSeconds]
if let isoDateFormatted = isoDateFormatter.date(from: isoStr) {
print(isoDateFormatted)
}