Получение неверного формата даты после конвертации - PullRequest
1 голос
/ 30 января 2020

Я получаю эту дату из API в формате строки: «2020-01-02T00: 00: 00».

Теперь я хотел преобразовать эту дату в формат Date. Вот что я сделал для этого ...

var utcTime = "\(dic["Due_Date"]!)" //Printing `utcTime` gives "2020-01-02T00:00:00"
self.dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
self.dateFormatter.locale = Locale(identifier: "en_US")
if let date = dateFormatter.date(from:utcTime) {
  self.scheduledDate = date //HERE I GET THE DATE AS 2020-01-01 18:30:00 UTC
}

Дата, полученная в строковом формате: «2020-01-02T00: 00: 00». Но когда я конвертирую его в формат Date, я получаю дату как 2020-01-01 18:30:00 UTC, что неверно.

Ответы [ 3 ]

3 голосов
/ 30 января 2020

Необходимо установить часовой пояс UT C (Всемирное координированное время)

var utcTime = "2020-01-02T00:00:00" //Printing `utcTime` gives "2020-01-02T00:00:00"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
dateFormatter.locale = Locale(identifier: "en_US")
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
if let date = dateFormatter.date(from:utcTime) {
  print(date)  //HERE I GET THE DATE AS 2020-01-01 18:30:00 UTC
}

Выход: - enter image description here

2 голосов
/ 30 января 2020

Вам также необходимо установить часовой пояс.

let utcTime =  "\(dic["Due_Date"]!)"
let dateFormatter = DateFormatter()
let timezone = TimeZone.init(secondsFromGMT: 0)

dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
dateFormatter.timeZone = timezone!

if let date = dateFormatter.date(from:utcTime) {
  print(date) // 2020-01-02 00:00:00 +0000
}
0 голосов
/ 30 января 2020
 let inputDate = "2020-01-02T00:00:00"

let dateFmt = DateFormatter()
dateFmt.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"

if let date = dateFmt.date(from: inputDate) {
    //IF YOU NEED TO CHANGE DATE FORMATE
    dateFmt.dateFormat = "dd-MMM-yyyy"
    print(dateFmt.string(from: date))
}
...