Читатели като вас помагат в подкрепа на MUO. Когато правите покупка чрез връзки на нашия сайт, ние може да спечелим комисионна за партньор. Прочетете още.

Часовите зони са от решаващо значение за всяко приложение, което работи с дати и часове. Разбира се, това е особено вярно за приложения, които обслужват потребители на различни континенти и местоположения. Часовите зони определят отместването от координираното универсално време (UTC) за конкретни местоположения по света. Те играят жизненоважна роля за осигуряване на точно и надеждно отчитане на времето.

Go предоставя времевия пакет в стандартната си библиотека за работа с време и часови зони. Можете да извличате и конвертирате часови зони на различни места, като използвате пакета за време.

Пакетът време

The време пакетът предоставя функционалност за работа с часове и дати, измерване и показване на време и манипулиране на дати с помощта на григориански календар без високосни секунди.

Времевият пакет осигурява a времетип структура съдържащо полето за местоположение, което можете да използвате за задаване на часови зони.

instagram viewer

Можете да импортирате времевия пакет с инструкция за импортиране.

импортиране"време"

Ето типа структура време и нейните полета. Полетата не са експортирани, така че отсъстват от официалната документация.

пакет основен

Тип време структура {
// wall е времето на стената във формата, върнат от runtime.nanotime()
// функция.
стена uint64

// ext е монотонното четене на часовника във формата, върнат от
// runtime.nanotime().
вътр int64

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

Тип Местоположение структура {
// име е името на часовата зона, като "UTC" или "PST".
име низ

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

// tx съдържа информация за това кога съкращението на часовата зона или
// компенсиране на промените за местоположение.
tx []zoneTrans

// extend съдържа името на родителската часова зона, ако това местоположение
// се простира от друг.
разшири низ

// cacheStart и cacheEnd са времеви отпечатъци на Unix, които определят диапазона
// за което полето cacheZone е валидно.
cacheStart int64
cacheEnd int64

// cacheZone сочи към зоната, която в момента е валидна за времето
// диапазон, дефиниран от cacheStart и cacheEnd.
cacheZone *зона
}

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

Информация за часовата зона се зарежда

Зареждането на информация за часовата зона е една от основните операции при работа с часови зони. The LoadLocation предоставя функционалност за зареждане на информация за часовата зона от База данни за часови зони на IANA. The LoadLocation методът приема името на часовата зона и връща информацията за местоположението и грешка за обработка. След като зареди информацията за часовата зона, той създава a време struct екземпляр, свързан с часовата зона.

импортиране (
"fmt"
"време"
)

функосновен() {
// Заредете местоположението на часовата зона за Америка/Ню_Йорк
loc, err := време. LoadLocation("Америка/Ню_Йорк")

ако грешка!= нула {
fmt. Println(„Грешка при зареждане на местоположението:“, грешка)
връщане
}

// Получаване на текущото време на местоположение
сега := време. Now().In (loc)
fmt. Println(„Текущо време в Ню Йорк:“, сега)
}

The в метод на Сега функцията взема място и отпечатва времето там:

Освен това можете да използвате FixedZone метод за зареждане на текущото време в местоположение, ако знаете низа за местоположение и отместването на часовата зона спрямо UTC. Първо ще трябва да заредите текущия час в UTC и след това ще използвате метода FixedZone, за да заредите местоположение въз основа на низа и отместването, преди да предаде местоположението на In метода на времето инстанция.

импортиране (
"fmt"
"време"
)

функосновен() {
// Вземете текущия час в UTC
сега := време. Сега().UTC()

// Задайте часовата зона за Лагос
лагос := сега. На време. FixedZone("WAT", 3600))

// Отпечатване на текущото време и на двете места
fmt. Println(„Текущо време в Лагос:“, Лагос)
}

The основен функцията отпечатва текущия час в Лагос на конзолата.

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

Времевият пакет осигурява Зона метод за извличане на съкращението и отместването на часовата зона, свързана с a време. време стойност. Методът Zone връща низа, представляващ съкращението на часовата зона (напр. „EST“ за „Америка/Ню_Йорк“) и цяло число, представляващо броя секунди на изток от UTC.

импортиране (
"fmt"
"време"
)

функосновен() {
// Заредете местоположението на часовата зона за Америка/Ню_Йорк
loc, err := време. LoadLocation("Америка/Ню_Йорк")

ако грешка!= нула {
fmt. Println(„Грешка при зареждане на местоположението:“, грешка)
връщане
}

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

// Получаване на отместването в секунди за всяка часова зона
//за часовите зони
_, отместване1 := t1.Zone()
_, отместване2 := t2.Zone()

// Изчисляване на продължителността на смяната на часовата зона
// между UTC и Америка/Ню_Йорк
продължителност := отместване2 - отместване1

fmt. Printf(„Продължителност на смяната на часовата зона“ +
" между UTC и Ню Йорк е: %d секунди", продължителност)
}

В основната функция методът Zone измерва продължителността на смяната на часовата зона между две часови зони (време. Времеви стойности). The t1 променлива е текущото време в UTC, а t2 променливата е текущото време в часовата зона "Америка/Ню_Йорк".

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

Оценяване на времето между часовите зони

Можете да оцените времето между часовите зони, ако знаете продължителността между часовите зони. Можете да използвате Добавете метод на In метода на вашето време. Екземпляр на структура време за добавяне на продължителност към времето в часова зона.

импортиране (
"дневник"
"време"// импортиране на времевия пакет
)

функevaluateTime(t време. Време, продължителност време. продължителност)време.време {
// зареди местоположението за Африка/Лагос
местоположение, грешка := време. LoadLocation("Африка/Лагос")

ако грешка!= нула {
дневник. Println(„Възникна грешка при зареждането на местоположението“)
}

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

The evaluateTime функция отнема време. Екземпляр на време и продължителност на типа време. Продължителност, връщайки часа в часовата зона. Той зарежда текущото време в „Африка/Лагос“ и добавя продължителност към времето.

Манипулирайте часа и датата с пакета за време

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