Я пытаюсь добавить проверочные тесты синтаксического анализа и хочу проверить, что отправленный мной исходный JSON может быть преобразован в объект, а этот объект, в свою очередь, превратился в JSON. В конце концов, проверка будет заключаться в том, что оба словаря равны. Однако я вижу, что, хотя синтаксический анализ даты работает, преобразование в строку заменяет +00:00 на Z. В своем исследовании я обнаружил, что они взаимозаменяемы, и я знаю, что теоретически могу заменить Z на +00:00 для сравнения, но мне было интересно, есть ли способ на {{X4 }} или любой DateFormatter, чтобы сказать, что вы предпочли бы +00:00, а не Z?

Для тех, кто любит видеть некоторый код, это моя быстрая площадка.

var date = "2018-01-30T22:13:12+00:00"
let df = ISO8601DateFormatter()
df.formatOptions = [.withInternetDateTime]

let newDate = df.date(from: date)
let newString = df.string(from: newDate!)
0
Steve 14 Мар 2018 в 23:50

1 ответ

Лучший ответ

Формат даты ISO 8601 гласит, что Z следует использовать, когда смещение часового пояса даты равно 0. Многие символы форматирования даты часового пояса, используемые с DateFormatter, также приводят к Z, если дата смещение часового пояса равно 0.

Если вы хотите создать строку из Date, и вы хотите убедиться, что вы получите +00:00 вместо Z, то используйте DateFormatter, а затем используйте DateFormatter с соответствующей датой форматирования спецификации.

Спецификатор формата xxx предоставит вам часовой пояс в формате +00:00. XXX и ZZZZZ также предоставят вам тот же формат, но предоставят вам Z в результате, если смещение равно 0. Подробнее об этом можно узнать в Страница технических спецификаций Unicode № 35.

Документация для ISO8601DateFormatter и его formatOptions утверждает, что ZZZZZ используется для часового пояса. Таким образом, вы всегда будете получать Z для смещения часового пояса 0.

DateFormatter с форматом даты yyyy-MM-dd'T'HH:mm:ssxxx даст вам тот же результат, который вы ищете. Но также не забудьте установить языковой стандарт средства форматирования даты на en_US_POSIX. Вам также необходимо убедиться, что выходные данные выходят в часовом поясе UTC. Установите для свойства форматтера timeZone значение TimeZone(secondsFromGMT: 0).

0
rmaddy 15 Мар 2018 в 00:16