Такие читатели, как вы, помогают поддерживать MUO. Когда вы совершаете покупку по ссылкам на нашем сайте, мы можем получать партнерскую комиссию. Читать далее.

Часовые пояса имеют решающее значение для любого приложения, работающего с датами и временем. Конечно, это особенно верно для приложений, которые обслуживают пользователей на разных континентах и ​​в разных местах. Часовые пояса определяют смещение от всемирного координированного времени (UTC) для определенных местоположений по всему миру. Они играют жизненно важную роль в обеспечении точной и надежной обработки времени.

Go предоставляет пакет времени в своей стандартной библиотеке для работы со временем и часовыми поясами. Вы можете получить и преобразовать часовые пояса в различных местах с помощью пакета time.

Пакет времени

время пакет обеспечивает функциональность для работа со временем и датами, измерение и отображение времени, а также управление датами с использованием григорианского календаря без дополнительных секунд.

Пакет «Тайм» предоставляет

Времятип структуры содержащее поле местоположения, которое вы можете использовать для установки часовых поясов.

Вы можете импортировать пакет времени с оператором импорта.

Импортировать"время"

Вот тип структуры time и ее поля. Поля не экспортируются, поэтому их нет в официальной документации.

упаковка основной

тип Время структура {
// стена — это время стены в формате, возвращаемом функцией runtime.nanotime()
// функция.
стена uint64

// ext — монотонное чтение часов в формате, возвращаемом
// время выполнения.nanotime().
доб. int64

// loc — указатель на структуру Location, связанную с этим временем.
место *Местоположение
}

тип Расположение структура {
// имя — это название часового пояса, например, «UTC» или «PST».
имя нить

// zone содержит информацию об аббревиатуре часового пояса, смещении,
// и правило для одного часового пояса в локации.
зона []зона

// tx содержит информацию о том, когда аббревиатура часового пояса или
// смещение изменений для местоположения.
TX [] ZoneTrans

// расширение содержит имя родительского часового пояса, если это местоположение
// расширяется от другого.
продлевать нить

// cacheStart и cacheEnd — временные метки Unix, определяющие диапазон
// для которого допустимо поле cacheZone.
cacheStart int64
cacheEnd int64

// cacheZone указывает на зону, которая в данный момент действительна для данного времени
// диапазон, определяемый параметрами cacheStart и cacheEnd.
cacheZone *зона
}

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

Загрузка информации о часовом поясе

Загрузка информации о часовых поясах — одна из основных операций при работе с часовыми поясами. ЗагрузитьМестоположение метод предоставляет функциональные возможности для загрузки информации о часовом поясе из База данных часовых поясов IANA. ЗагрузитьМестоположение Метод принимает имя часового пояса и возвращает информацию о местоположении и ошибку для обработки. После загрузки информации о часовом поясе создается время экземпляр структуры, связанный с часовым поясом.

Импортировать (
"ФМТ"
"время"
)

функцияосновной() {
// Загрузить местоположение часового пояса для Америки/Нью-Йорка
loc, err := время. ЗагрузитьРасположение("Америка/Нью-Йорк")

если ошибся != ноль {
ФМТ. Распечатать("Ошибка загрузки местоположения:", ошибся)
возвращаться
}

// Получить текущее время в локации
сейчас := время. Сейчас(). В (loc)
ФМТ. Распечатать("Текущее время в Нью-Йорке:", сейчас)
}

В метод Сейчас функция принимает местоположение и печатает время там:

Кроме того, вы можете использовать Фиксированная зона метод для загрузки текущего времени в местоположении, если вы знаете строку местоположения и смещение часового пояса от UTC. Сначала вам нужно будет загрузить текущее время в формате UTC, а затем вы будете использовать метод FixedZone для загрузки местоположение на основе строки и смещения перед передачей местоположения методу времени пример.

Импортировать (
"ФМТ"
"время"
)

функцияосновной() {
// Получить текущее время в формате UTC
сейчас := время. Сейчас().UTC()

// Установить часовой пояс для Лагоса
лагос := сейчас. Во время. Фиксированная зона("WAT", 3600))

// Печатаем текущее время в обоих местах
ФМТ. Распечатать(«Текущее время в Лагосе:», Лагос)
}

основной Функция выводит текущее время в Лагосе на консоль.

Измерение продолжительности часового пояса

Пакет «Тайм» обеспечивает Зона метод получения аббревиатуры и смещения часового пояса, связанного с время. Время ценить. Метод Zone возвращает строку, представляющую аббревиатуру часового пояса (например, «EST» для «America/New_York»), и целое число, представляющее количество секунд к востоку от UTC.

Импортировать (
"ФМТ"
"время"
)

функцияосновной() {
// Загрузить местоположение часового пояса для Америки/Нью-Йорка
loc, err := время. ЗагрузитьРасположение("Америка/Нью-Йорк")

если ошибся != ноль {
ФМТ. Распечатать("Ошибка загрузки местоположения:", ошибся)
возвращаться
}

// Получить текущее время в формате UTC и указанное местоположение
t1 := время. Сейчас()
t2 := t1.In (loc)

// Получаем смещение в секундах для каждого часового пояса
//для часовых поясов
_, смещение1 := t1.Zone()
_, смещение2 := t2.Zone()

// Рассчитываем продолжительность смены часового пояса
// между UTC и Америкой/Нью-Йорком
продолжительность := смещение2 - смещение1

ФМТ. Распечататьf("Продолжительность смены часового пояса" +
"между UTC и Нью-Йорком: %d секунд", продолжительность)
}

В основной функции метод Zone измеряет продолжительность смены часового пояса между двумя часовыми поясами (time. значения времени). т1 переменная — это текущее время в формате UTC, а т2 переменная — текущее время в часовом поясе «Америка/Нью-Йорк».

Функция печатает продолжительность переменная (разница в смещении между часовыми поясами), представляющая сдвиг часового пояса в секундах.

Оценка времени между часовыми поясами

Вы можете оценить время между часовыми поясами, если знаете продолжительность между часовыми поясами. Вы можете использовать Добавлять метод метода In вашего времени. Экземпляр структуры времени, чтобы добавить длительность ко времени в часовом поясе.

Импортировать (
"бревно"
"время"// импортируем пакет времени
)

функцияоценить время(т время. Время, продолжительность время. Продолжительность)время.Время {
// загрузить местоположение для Африки/Лагоса
местоположение, ошибка := время. ЗагрузитьРасположение("Африка/Лагос")

если ошибся != ноль {
бревно. Распечатать("Произошла ошибка при загрузке местоположения")
}

возвращаться т. В (местоположение).Добавить (длительность)
}

оценить время функция занимает время. Экземпляр времени и продолжительность типа время. Продолжительность, возвращая время в часовом поясе. Он загружает текущее время в «Африка/Лагос» и добавляет время ко времени.

Управление временем и датой с помощью пакета времени

Пакет времени очень универсален для работы как со временем, так и с датами. Пакет time предоставляет такие функции, как Unix() для преобразования времени во время Unix, Sleep() для приостановки горутин и Format() для форматирования значений времени в строку.