Вы можете просто создать два формата даты, один для анализа входной строки даты, а другой для преобразования даты в формат даты вашего сервера:
extension Formatter {
static let inputDate: DateFormatter = {
let dateFormatter = DateFormatter()
dateFormatter.locale = .init(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "EEE MMM d yyyy HH:mm:ss.SSSZ"
return dateFormatter
}()
static let serverDate: DateFormatter = {
let dateFormatter = DateFormatter()
dateFormatter.locale = .init(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "EEE MMM d yyyy HH:mm:ss 'GMT'xxxx"
return dateFormatter
}()
}
func convertToServer(input: String) -> String? {
guard let date = Formatter.inputDate.date(from: input) else { return nil }
return Formatter.serverDate.string(from: date)
}
convertToServer(input: "Sat Aug 1 2020 23:38:56.123Z") // "Sat Aug 1 2020 20:38:56 GMT-0300"