Преобразование из строки в дату в swift возвращает ноль

#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")