#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()
.
Комментарии:
1. Даты не имеют понятия о часовом поясе и
Date.description
, которые не имеют понятия о том, какой часовой пояс вам может понадобиться. Поэтому даты всегда печатаются в UTC, если вы не форматируете ихDateFormatter
, используя сначала правильный часовой пояс и печатая созданные строки.2. 0000 означает нулевые секунды от GMT
3. если вы хотите напечатать местное время без использования DateFormatter, вы можете распечатать описание даты с указанием локали
date.description(with: .current)