Дата с сервера в Swift - PullRequest
0 голосов
/ 29 мая 2018

Возникла проблема при преобразовании строки даты, поступающей с сервера, в Date.Ниже мой код

let dateString = "2017–04–02T13:10:00.000"  //Date coming from server
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'hh:mm:ss.SSS"
let date =  dateFormatter.date(from: dateString)
print("date is :\(String(describing: date))")

Но журнал

date is :nil

* Обновлен для 24-часового формата

Ниже приведено обновление для 24часовой формат (ЧЧ)

let dateString = "2017–04–02T13:10:00.000"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"
let date =  dateFormatter.date(from: dateString)

пока тот же результат

Я пробовал эти ссылки

Link1 Link2 Link3 и т. Д.

, но безуспешно.

Пожалуйста, дайте мне знать, что я делаю не так с приведенным выше кодом.

1 Ответ

0 голосов
/ 29 мая 2018

Ответ на ваш вопрос: не вводите дефис / тире символ или символ с клавиатуры.Просто скопируйте его из окна консоли (операторы печати ответа веб-службы и вставьте его в формате даты)

Попробуйте и посмотрите:

let dateString = "2017–04–02T13:10:00.000"  //Date coming from server
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy–MM–dd'T'HH:mm:ss.SSS"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
let date =  dateFormatter.date(from: dateString)
print("date is :\(String(describing: date))")

Результат: дата: Необязательно (2017-04-02 07:40:00 +0000)

Также обратите внимание, что у вас проблема с часовым поясом.Ваша исходная строка даты не предоставляет никакого конкретного часового пояса.Поэтому вам нужно решить, какой часовой пояс представляет строка.Так как это приходит с сервера, это, скорее всего, в UTC времени.Если это так, вам нужно установить свойство timeZone средства форматирования даты.В противном случае строка будет проанализирована, как если бы это было локальное время пользователя.

dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)

Кредит: Martin R
Строка сервера содержит "EN-DASH" (U+2013) в качестве разделителей, а не обычных дефисов (минус).

(в соответствии с предложением Leo Dabus ), установите идентификатор языкового стандарта для вашего устройства форматирования даты - "en_US_POSIX".

...