Дата начала дня преобразуется при печати

#swift #xcode #timezone

#swift #xcode #Часовой пояс

Вопрос:

Я нахожусь в часовом поясе GMT 1.

Функция startOfDay должна возвращать «первый момент заданной даты». В моем случае для даты «2020-11-10 19:52:52 0000 n» Я должен получить «2020-11-10 00:00:00 0000 n», но я получаю «2020-11-09 23:00:00 0000 n» (желаемое время — 1 час).

Как вы можете видеть на скриншоте, переменная настроена правильно, но когда я пытаюсь ее распечатать, она волшебным образом преобразуется. Похоже, что swift преобразует его на лету, но почему?

Сначала я подумал, что, возможно, у меня как-то другой часовой пояс для объекта Календаря, но когда я печатаю Calendar.current.timeZone.abbreviation() результат «GMT 1», такой же, как для объекта даты или TimeZone.current.abbreviation() .

Игровая площадка Xcode

Комментарии:

1. Даты не имеют понятия о часовом поясе и print вызывают вызовы Date.description , которые не имеют понятия о том, какой часовой пояс вам может понадобиться. Поэтому даты всегда печатаются в UTC, если вы не форматируете их DateFormatter , используя сначала правильный часовой пояс и печатая созданные строки.

2. 0000 означает нулевые секунды от GMT

3. если вы хотите напечатать местное время без использования DateFormatter, вы можете распечатать описание даты с указанием локали date.description(with: .current)