Swift ISO8601 格式至今
Swift ISO8601 format to Date
我有以下字符串:20180207T124600Z
如何将其转换为 Date 对象?
这是我当前的代码,但它 returns nil
:
let dateString = "20180207T124600Z"
let dateFormatter = ISO8601DateFormatter()
dateFormatter.formatOptions = .withFullTime
print(dateFormatter.date(from: dateString))
您可以为 NSDateFormatter 指定 ISO 8601 日期格式以获取日期:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyyMMdd'T'HHmmssZ"
print(dateFormatter.date(from: dateString)) //2018-02-07 12:46:00 +0000
您可以使用以下函数获取日期...
func isodateFromString(_ isoDate: String) -> Date? {
let formatter = DateFormatter()
formatter.dateFormat = "yyyyMMdd'T'HHmmssZ"
return formatter.date(from: isoDate)
}
您需要为 ISO8601DateFormatter
指定格式选项以满足您的要求(年、月、日和时间),示例如下:
//: Playground - noun: a place where people can play
import UIKit
let dateString = "20180207T124600Z"
let dateFormatter = ISO8601DateFormatter()
dateFormatter.formatOptions = [
.withYear,
.withMonth,
.withDay,
.withTime
]
print(dateFormatter.string(from: Date()))
print(dateFormatter.date(from: dateString))
ISO8601DateFormatter 应该类似于
yyyy-MM-dd'T'HH:mm:ssZ
只要您的日期字符串格式正确,它就不会 return nil。
至于formatOptions
,它是根据 Apple 文档生成和解析 ISO 8601 日期表示的选项
Swift 4
在你的例子中,它应该是这样的:
let dateString = "2016-11-01T21:10:56Z"
let dateFormatter = ISO8601DateFormatter()
let date = dateFormatter.date(from: dateString)
let dateFormatter2 = ISO8601DateFormatter()
dateFormatter2.formatOptions = .withFullTime
print(dateFormatter2.string(from: date!))
如果你有这样的约会:
let isoDate = "2018-12-26T13:48:05.000Z"
并且您想将其解析为日期,请使用:
let isoDateFormatter = ISO8601DateFormatter()
isoDateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
isoDateFormatter.formatOptions = [
.withFullDate,
.withFullTime,
.withDashSeparatorInDate,
.withFractionalSeconds]
if let realDate = isoDateFormatter.date(from: isoDate) {
print("Got it: \(realDate)")
}
重要的是为您拥有的数据的每个部分提供所有选项。在我的例子中,秒数表示为分数。
我有以下字符串:20180207T124600Z
如何将其转换为 Date 对象?
这是我当前的代码,但它 returns nil
:
let dateString = "20180207T124600Z"
let dateFormatter = ISO8601DateFormatter()
dateFormatter.formatOptions = .withFullTime
print(dateFormatter.date(from: dateString))
您可以为 NSDateFormatter 指定 ISO 8601 日期格式以获取日期:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyyMMdd'T'HHmmssZ"
print(dateFormatter.date(from: dateString)) //2018-02-07 12:46:00 +0000
您可以使用以下函数获取日期...
func isodateFromString(_ isoDate: String) -> Date? {
let formatter = DateFormatter()
formatter.dateFormat = "yyyyMMdd'T'HHmmssZ"
return formatter.date(from: isoDate)
}
您需要为 ISO8601DateFormatter
指定格式选项以满足您的要求(年、月、日和时间),示例如下:
//: Playground - noun: a place where people can play
import UIKit
let dateString = "20180207T124600Z"
let dateFormatter = ISO8601DateFormatter()
dateFormatter.formatOptions = [
.withYear,
.withMonth,
.withDay,
.withTime
]
print(dateFormatter.string(from: Date()))
print(dateFormatter.date(from: dateString))
ISO8601DateFormatter 应该类似于
yyyy-MM-dd'T'HH:mm:ssZ
只要您的日期字符串格式正确,它就不会 return nil。
至于formatOptions
,它是根据 Apple 文档生成和解析 ISO 8601 日期表示的选项
Swift 4
在你的例子中,它应该是这样的:
let dateString = "2016-11-01T21:10:56Z"
let dateFormatter = ISO8601DateFormatter()
let date = dateFormatter.date(from: dateString)
let dateFormatter2 = ISO8601DateFormatter()
dateFormatter2.formatOptions = .withFullTime
print(dateFormatter2.string(from: date!))
如果你有这样的约会:
let isoDate = "2018-12-26T13:48:05.000Z"
并且您想将其解析为日期,请使用:
let isoDateFormatter = ISO8601DateFormatter()
isoDateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
isoDateFormatter.formatOptions = [
.withFullDate,
.withFullTime,
.withDashSeparatorInDate,
.withFractionalSeconds]
if let realDate = isoDateFormatter.date(from: isoDate) {
print("Got it: \(realDate)")
}
重要的是为您拥有的数据的每个部分提供所有选项。在我的例子中,秒数表示为分数。