Невозможно создать дату из формата "гггг-мм-дд'т'хч: мм: сс +00:00"

Я хочу конвертировать из строки в дату. Использую ли я правильный формат здесь с "гггг-ММ-дд'ТЧЧ: мм: сс + 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)
    }
}

1 ответ

Вопрос в строке:

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) и так далее. Однако для другого формата вам нужно использовать другое количество x (маленький x используется, если часовой пояс не содержит Z):

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

Если часовой пояс содержит Zтогда мы используем капитал X,

Другие вопросы по тегам