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.