Проблема в форматировании строки даты Swift 3
Мне нужно преобразовать следующую строку даты в дату в Swift 3.
Fri Dec 09 16:18:43 AMST 2016
Вот код, который я использовал, но он получает деньги за эту конкретную конвертацию строки даты. (Эта дата была зарегистрирована на Android с помощью new Date().toString()
Метод.)
static func formatDate(date: String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
dateFormatter.dateFormat = "EEE MMM dd HH:mm:ss zzz yyyy"
//Works for "Fri Sep 16 10:55:48 GMT+05:30 2016"
var myDate = dateFormatter.date(from: date)
// My date returns nil on "Fri Dec 09 16:18:43 AMST 2016"
dateFormatter.dateFormat = "dd/MM/yyyy"
return "\(dateFormatter.string(from: myDate!))"
}
В базе данных есть оба типа строк. Я пробовал с различными типами форматов часовых поясов (z/zz/zzz/zzzz/zzzzz), но всегда myDate
возвращает ноль
Любая помощь будет оценена. Заранее спасибо.
1 ответ
Apple Doc для TimeZone(abbreviation:)
:
Как правило, вам не рекомендуется использовать сокращения, за исключением уникальных случаев, таких как "GMT". Сокращения часового пояса не стандартизированы, и поэтому данное сокращение может иметь несколько значений.
Представляет ли AMST "Летнее время Амазонки" (UTC-3) или "Летнее время Армении" (UTC+5)? Смотрите: https://www.timeanddate.com/time/zones
Вероятно, поэтому он не может определить правильный часовой пояс для использования.
Решения, которые я могу предложить:
- Если вы знаете, какой часовой пояс AMST:
- замените AMST на UTC-3 или UTC + 5 в строке даты
- удалить AMST из строки даты и использовать
dateFormatter.timeZone = TimeZone(secondsFromGMT: -3 or 5 * 3600)
- Пусть ваш источник выдает более точный часовой пояс.
Обратите внимание на следующий код, где AMST понимается правильно:
let df = DateFormatter()
df.locale = Locale.init(identifier: "pt_BR") // assuming AMST is Amazon Summer Time (UTC -3)
df.dateFormat = "HH:mm:ss z"
print(df.date(from: "16:18:43 AMST")) // Optional(2000-01-01 19:18:43 +0000)
Но как только вы включите английские названия дней или месяцев (например, пятница или декабрь), он выдаст nil
(потому что они не на португальском языке).