Swift ISO8601格式到目前为止

时间:2018-02-19 13:14:02

标签: ios swift nsdateformatter iso8601

我有以下字符串:20180207T124600Z

如何将其转换为Date对象?

这是我当前的代码,但它返回nil

let dateString = "20180207T124600Z"
let dateFormatter = ISO8601DateFormatter()
dateFormatter.formatOptions = .withFullTime
print(dateFormatter.date(from: dateString))

5 个答案:

答案 0 :(得分:4)

您需要指定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))

答案 1 :(得分:3)

您可以为NSDateFormatter指定ISO8601日期格式以获取日期:

{{1}}

答案 2 :(得分:2)

ISO8601DateFormatter应该类似于

  

YYYY-MM-DD' T' HH:MM:SSZ

只要您的日期字符串格式正确,就不会返回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!))

答案 3 :(得分:0)

您可以使用以下功能获取日期......

func isodateFromString(_ isoDate: String) -> Date? {

    let formatter = DateFormatter()
    formatter.dateFormat = "yyyyMMdd'T'HHmmssZ"
    return formatter.date(from: isoDate)
}

答案 4 :(得分:0)

如果您有一个日期,例如:

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)")
}

重要的是为您拥有的数据的每个部分提供所有选项。在我的情况下,秒用分数表示。