Есть много проблем с вашим кодом.Нет причин создавать два Date
объекта из одной строки.Просто проанализируйте оригинальную строку один раз.Затем вы можете создать свою строку даты и строку времени с желаемыми форматами из этой одной даты.
Вам также следует использовать специальный языковой стандарт en_US_POSIX
при анализе строк даты фиксированного формата.Также нет необходимости устанавливать часовой пояс при разборе исходной строки даты.Строка предоставляет свой часовой пояс.+0000
означает, что это время UTC.
Возможно, вы не захотите указывать часовой пояс при преобразовании даты в ваши окончательные строки.Скорее всего, вам нужны строки в часовом поясе пользователя, а не в каком-то жестко закодированном часовом поясе.
Вот ваш код, который много очищен:
func convertDateAndTimeFormat2() {
let timeDate = "2019-09-24 15:00:00 +0000"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
if let dateObj = dateFormatter.date(from: timeDate) {
dateFormatter.dateFormat = "EEEE, MMM d, yyyy"
dateFormatter.timeZone = TimeZone(abbreviation: "GMT+3:00") // Probably not needed
let timeFormatter = DateFormatter()
timeFormatter.dateFormat = "HH:mm"
timeFormatter.timeZone = TimeZone(abbreviation: "GMT+3:00") // Probably not needed
let timef = timeFormatter.string(from: dateObj)
let datef = dateFormatter.string(from: dateObj)
print("Date: \(datef), time: \(timef)")
}
}
convertDateAndTimeFormat2()
Вывод:
Дата: вторник, 24 сентября 2019 года, время: 18:00