Часовые пояса и локали
Корректно обрабатывайте различия часовых поясов и локалей.
«Часовые пояса и локали» — бесплатный урок Swift Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.
Часовые пояса и локали
Один и тот же момент времени Date отображается по-разному в разных частях мира. TimeZone и локаль определяют, как его интерпретировать и показывать.
Основы TimeZone
TimeZone представляет смещение относительно UTC и правила перехода на летнее время. TimeZone.current — это часовой пояс устройства.
import Foundation
let tz = TimeZone.current
print("Identifier present: \(!tz.identifier.isEmpty)")Создание определённого часового пояса
Создайте именованный часовой пояс с помощью TimeZone(identifier:), например «America/New_York» или «Europe/Istanbul».
import Foundation
if let tokyo = TimeZone(identifier: "Asia/Tokyo") {
print("Tokyo offset seconds: \(tokyo.secondsFromGMT())")
}Смещения относительно GMT
secondsFromGMT(for:) возвращает текущее смещение, которое может меняться в течение года из-за перехода на летнее время.
import Foundation
let utc = TimeZone(identifier: "UTC")!
print("UTC offset is zero: \(utc.secondsFromGMT() == 0)")Часовые пояса влияют на календари
Задайте календарю значение timeZone, чтобы вычисления дней и часов выполнялись для этого региона, а не для часового пояса устройства по умолчанию.
import Foundation
var cal = Calendar.current
cal.timeZone = TimeZone(identifier: "UTC")!
let hour = cal.component(.hour, from: Date())
print("Hour in UTC between 0 and 23: \(0...23 ~= hour)")Часовые пояса в форматировании
Date.FormatStyle может содержать определённый часовой пояс, чтобы вывод отражал этот регион независимо от настроек устройства.
import Foundation
let style = Date.FormatStyle(date: .omitted, time: .shortened)
.timeZone(TimeZone(identifier: "UTC")!)
let s = Date().formatted(style)
print(!s.isEmpty)Основы локали
Локаль содержит язык и региональные соглашения: названия месяцев, первый день недели, порядок чисел и даты.
import Foundation
let locale = Locale.current
print("Has identifier: \(!locale.identifier.isEmpty)")Создание локали
Создайте определённую локаль с помощью Locale(identifier:), например «fr_FR» или «tr_TR».
import Foundation
let french = Locale(identifier: "fr_FR")
print("French locale id: \(french.identifier)")Локаль изменяет вывод
Применение локали к стилю форматирования изменяет названия месяцев и их порядок. Одна и та же дата выглядит по-разному на разных языках.
import Foundation
let now = Date()
let style = Date.FormatStyle(date: .long, time: .omitted)
.locale(Locale(identifier: "en_US"))
print(!now.formatted(style).isEmpty)Локаль и календарь вместе
Локаль также влияет на первый день недели и нумерацию недель в календаре. Для полностью корректного результата объединяйте часовой пояс, локаль и календарь.
import Foundation
var cal = Calendar(identifier: .gregorian)
cal.locale = Locale(identifier: "en_US")
print("First weekday: \(cal.firstWeekday)")Хранение в UTC и отображение по местному времени
Рекомендуемый подход: храните и передавайте даты в формате UTC, а преобразуйте их в часовой пояс и локаль пользователя только при отображении.
import Foundation
let instant = Date()
let utcStyle = Date.FormatStyle(date: .numeric, time: .standard)
.timeZone(TimeZone(identifier: "UTC")!)
print("UTC display ready: \(!instant.formatted(utcStyle).isEmpty)")Быстрая проверка
Как рекомендуется работать с датами в разных регионах?
Итоги
TimeZone задаёт смещение относительно UTC и правила перехода на летнее время (DST), а локаль управляет языком и региональным форматированием. Оба параметра можно задать для календарей и стилей форматирования. Храните даты в UTC и преобразуйте их в местный часовой пояс и локаль только при отображении. На этом курс по датам и календарям завершён.
Часто задаваемые вопросы
Урок «Часовые пояса и локали» бесплатный?
Да — полный текст урока «Часовые пояса и локали» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.
Чему я научусь в уроке «Часовые пояса и локали»?
Корректно обрабатывайте различия часовых поясов и локалей. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Часовые пояса и локали»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Тип Date и интервалы времени
- Calendar и DateComponents
- Форматирование дат
- Часовые пояса и локали