Leitores como você ajudam a apoiar o MUO. Quando você faz uma compra usando links em nosso site, podemos ganhar uma comissão de afiliado. Consulte Mais informação.

Os fusos horários são cruciais para qualquer aplicativo que lide com datas e horas. Claro, isso é especialmente verdadeiro para aplicativos que atendem usuários em todos os continentes e locais. Os fusos horários determinam o deslocamento do Tempo Universal Coordenado (UTC) para locais específicos em todo o mundo. Eles desempenham um papel vital na garantia de controle de tempo preciso e confiável.

Go fornece o pacote de tempo em sua biblioteca padrão para trabalhar com tempo e fusos horários. Você pode buscar e converter fusos horários em vários locais usando o pacote de tempo.

O pacote de tempo

O tempo pacote fornece funcionalidade para trabalhar com horas e datas, medindo e exibindo o tempo e manipulando datas usando um calendário gregoriano sem segundos bissextos.

O pacote de tempo fornece uma Tempotipo de estrutura contendo o campo de localização que você pode usar para definir fusos horários.

Você pode importar o pacote de tempo com uma instrução de importação.

importar"tempo"

Aqui está o tipo de estrutura de tempo e seus campos. Os campos não são exportados, portanto, estão ausentes da documentação oficial.

pacote principal

tipo Tempo estrutura {
// wall é o tempo de parede no formato retornado pelo runtime.nanotime()
// função.
parede uint64

// ext é a leitura do relógio monotônico no formato retornado por
// runtime.nanotime().
ramal int64

// loc é um ponteiro para a estrutura Location associada a este tempo.
loc *Localização
}

tipo Localização estrutura {
// name é o nome do fuso horário, como "UTC" ou "PST".
nome corda

// zona contém informações sobre a abreviatura do fuso horário, deslocamento,
// e regra para um único fuso horário no local.
zona [] zona

// tx contém informações sobre quando a abreviação do fuso horário ou
// alterações de deslocamento para um local.
tx []zoneTrans

// extend contém o nome de um fuso horário pai se este local
// se estende de outro.
ampliar corda

// cacheStart e cacheEnd são timestamps Unix que definem o intervalo
// para o qual o campo cacheZone é válido.
cacheStart int64
cacheFim int64

// cacheZone aponta para a zona atualmente válida para o tempo
// intervalo definido por cacheStart e cacheEnd.
cacheZona *zona
}

Muitos métodos usam as funções Time e Localização structs, incluindo os métodos de fuso horário.

Carregando informações de fuso horário

Carregar informações de fuso horário é uma das operações básicas ao trabalhar com fusos horários. O LoadLocation O método fornece funcionalidade para carregar informações de fuso horário do Banco de dados de fusos horários da IANA. O LoadLocation O método recebe o nome do fuso horário e retorna as informações de localização e um erro para manipulação. Depois de carregar as informações do fuso horário, ele cria um tempo struct instância associada ao fuso horário.

importar (
"fmt"
"tempo"
)

funçãoprincipal() {
// Carrega a localização do fuso horário para America/New_York
loc, err := tempo. LoadLocation("América/Nova_York")

se erro != nada {
fmt. Imprimirln("Erro ao carregar a localização:", erro)
retornar
}

// Obtém a hora atual em um local
agora := tempo. Agora().Em (local)
fmt. Imprimirln("Hora atual em Nova York:", agora)
}

O Em método do Agora A função pega um local e imprime a hora lá:

Além disso, você pode usar o Zona Fixa método para carregar a hora atual em um local se você souber a string de localização e o deslocamento do fuso horário do UTC. Primeiro, você precisará carregar a hora atual em UTC e, em seguida, usará o método FixedZone para carregar o localização com base na string e deslocamento antes de passar a localização para o método In do tempo instância.

importar (
"fmt"
"tempo"
)

funçãoprincipal() {
// Obtém a hora atual em UTC
agora := tempo. Agora().UTC()

// Definir o fuso horário para Lagos
lagos := agora. Em tempo. Zona Fixa("WAT", 3600))

// Imprime a hora atual em ambos os locais
fmt. Imprimirln("Hora atual em Lagos:", lagos)
}

O principal A função imprime a hora atual em Lagos no console.

Medindo a duração do fuso horário

O pacote de tempo fornece a Zona método para recuperar a abreviação e deslocamento do fuso horário associado a um tempo. Tempo valor. O método Zone retorna a string que representa a abreviação do fuso horário (por exemplo, "EST" para "America/New_York") e um inteiro representando o número de segundos a leste do UTC.

importar (
"fmt"
"tempo"
)

funçãoprincipal() {
// Carrega a localização do fuso horário para America/New_York
loc, err := tempo. LoadLocation("América/Nova_York")

se erro != nada {
fmt. Imprimirln("Erro ao carregar a localização:", erro)
retornar
}

// Obtém a hora atual em UTC e o local especificado
t1 := tempo. Agora()
t2 := t1.In (loc)

// Obtém o deslocamento em segundos para cada fuso horário
//para os fusos horários
_, offset1 := t1.Zone()
_, offset2 := t2.Zone()

// Calcula a duração da mudança de fuso horário
// entre UTC e America/New_York
duração := offset2 - offset1

fmt. Imprimirf("A duração da mudança de fuso horário" +
" entre UTC e Nova York é: %d segundos", duração)
}

Na função principal, o método Zone mede a duração da mudança de fuso horário entre dois fusos horários (time. Valores de tempo). O t1 variável é a hora atual em UTC, e o t2 variável é a hora atual no fuso horário "America/New_York".

A função imprime o duração variável (a diferença no deslocamento entre os fusos horários) que representa a mudança de fuso horário em segundos.

Avaliando o tempo entre fusos horários

Você pode avaliar o tempo entre os fusos horários se souber a duração entre os fusos horários. Você pode usar o Adicionar método do método In do seu tempo. Time struct instância para adicionar uma duração ao tempo em um fuso horário.

importar (
"registro"
"tempo"// importa o pacote de tempo
)

funçãoavaliarTempo(tempo t. Tempo, tempo de duração. Duração)tempo.Tempo {
// carrega a localização para África/Lagos
localização, erro := hora. LoadLocation("África/Lagos")

se erro != nada {
registro. Imprimirln("Ocorreu um erro ao carregar o local")
}

retornar t. Em (localização).Adicionar (duração)
}

O avaliarTempo função leva em um tempo. Instância de tempo e uma duração do tipo tempo. Duração, retornando a hora no fuso horário. Ele carrega a hora atual em "África/Lagos" e adiciona uma duração à hora.

Manipular hora e data com o pacote de tempo

O pacote de tempo é muito versátil para trabalhar com horas e datas. O pacote time fornece funções como Unix() para converter hora em hora Unix, Sleep() para pausar goroutines e Format() para formatar valores de hora em string.