У меня есть этот тип строки и вы хотите преобразовать ее на сегодняшний день
"2017-05-27T00: 00: 00,000 + 0400"
но ни одна из этих форм не преобразует его на сегодняшний день
"YYYY-MM-dd'T'HH: мм: SSSZ"
"YYYY-MM-dd'T'HH: мм: SSSX"
Вы забыли добавить ss
течение нескольких секунд, поэтому правильный formate должен быть yyyy-MM-dd'T'HH:mm:ss.SSSZ
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
let date = dateFormatter.date(from: "2017-05-27T00:00:00.000+0400")
Ваша ошибка заключалась в отсутствии seconds
. Поэтому правильный формат должен быть: yyyy-MM-dd'T'HH:mm:ss.SSSZ
. Вы также можете использовать расширение для этой цели:
extension String {
var toCustomDate: Date {
return Date.Formatter.customDate.date(from: self)!
}
}
extension Date {
struct Formatter {
static let customDate: DateFormatter = {
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
return formatter
}()
}
var customDate: String {
return Formatter.customDate.string(from: self)
}
}
let str = "2017-05-27T00:00:00.000+0400"
let date = str.toCustomDate
Если у вас больше форматов даты, просто добавьте их в расширения.
вы можете это сделать
let dateString = "2017-05-27T00:00:00.000+0400"
let formachanger = DateFormatter()
formachanger .dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
if let dateFromString = formachanger .date(from: dateString) {
formachanger .dateFormat = "yyyy-MM-dd HH:mm"
let stringFromDate = formachanger .string(from: dateFromString)
}
попробуйте эту функцию
func getGMTDateFrom(String string : String) -> Date? {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEE, dd MMM yyyy hh:mm:ss zz"
let dateObj = dateFormatter.date(from: string)
return dateObj
}
Измените формат даты в соответствии с вашими потребностями.