#ios #swift #dateformatter
#iOS #swift #nsdateformatter
Вопрос:
У меня проблема с преобразованием строки в дату в swift 3. Вот мой код, он возвращает мне нулевое значение при преобразовании.
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEE, dd MMM yyyy hh:mm:ss zzzz"
dateFormatter.locale = Locale.init(identifier: "bg_BG")
let recdate = dateFormatter.date(from:"Fri, 10 Mar 2017 15:03:03 0530")!;`
Ответ №1:
Вы установили неправильный спецификатор формата для часа и часового пояса. Используйте это:
dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss Z"
dateFormatter.locale = Locale(identifier: "en_US")
hh
означает 12-часовой формат, поэтому 15 часов нет. ИспользуйтеHH
вместоzzzz
недопустимый спецификатор часового пояса. ИспользуйтеZ
вместо- Если значение Friday не сокращено до
Fri
на болгарском языке, используйте английский язык
Комментарии:
1. пробовал это E, d ММ гггг ЧЧ: мм: ss Z и EEE, dd ММ гггг ЧЧ: мм: ss Z , все еще не работает. Я по-прежнему получаю неустранимую ошибку: неожиданно найдено ноль при развертывании необязательного значения 2017-03-13 08:52:50.557530 Dubber[1851:1317294] неустранимая ошибка: неожиданно найдено ноль при развертывании необязательного значения
2. @nikhil Попробуйте
dateFormatter.locale = Locale.current
, я понятия не имею, почему «bg_BG» не работает.
Ответ №2:
У вас есть пара проблем, во-первых, как указано в Code Different, вам нужно использовать HH для чтения 24-часового времени. Но вы также указываете языковой стандарт, что означает, что части «word» должны быть на болгарском, а не на английском языке. Кажется, что язык по умолчанию работает нормально:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss zzzz"
//dateFormatter.locale = Locale.init(identifier: "bg_BG")
let recdate = dateFormatter.date(from:"Fri, 10 Mar 2017 15:03:03 0530")!
Если вы используете болгарские названия дней и месяцев, ваш формат должен работать.
dateFormatter.date(from:"нд, 10 март 2017 15:03:03 0530")