首页 > 解决方案 > 无法从格式“yyyy-MM-dd'T'HH:mm:ss+00:00”创建日期

问题描述

我想从字符串转换为日期。我在这里使用正确的格式 吗? "yyyy-MM-dd'T'HH:mm:ss+00:00"

extension String {
    func format(_ format:String) -> String {
        var date: Date?
        let dateFormatterGet = DateFormatter()
        let dateFormatterOutput = DateFormatter()
        dateFormatterGet.dateFormat = "yyyy-MM-dd'T'HH:mm:ss+00:00"
        dateFormatterOutput.dateFormat = format
        if let d = dateFormatterGet.date(from: self) {
            date = d
        }
        return dateFormatterOutput.string(from: date!)
    }
}

extension Date {
    func string(with format: String) -> String {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = format
        return dateFormatter.string(from: self)
    }
}

标签: swiftdateformatter

解决方案


问题在于:

dateFormatterGet.dateFormat = "yyyy-MM-dd'T'HH:mm:ss+00:00"

+00:00需要替换xxxx为:

dateFormatterGet.dateFormat = "yyyy-MM-dd'T'HH:mm:ssxxxx"

您的代码将变为:

func format(_ format:String) -> String {
    var date: Date?
    let dateFormatterGet = DateFormatter()
    let dateFormatterOutput = DateFormatter()
    dateFormatterGet.dateFormat = "yyyy-MM-dd'T'HH:mm:ssxxxx"
    dateFormatterOutput.dateFormat = format
    if let d = dateFormatterGet.date(from: self) {
        date = d
    }
    return dateFormatterOutput.string(from: date!)
}

注意:这里我假设您使用的日期字符串将包含时区,如+xx:xx(如 +02:00)等等。但是,对于不同的格式,您需要使用不同的数量(如果时区不包含 Z,则使用xsmall ):x

  1. x-> -08, +0330
  2. xx-> -0800
  3. xxx-> -800, -075254
  4. xxxx-> -8:00, -07:52:54

如果时区包含Z,那么我们使用大写X


推荐阅读