Czytelnicy tacy jak ty pomagają wspierać MUO. Kiedy dokonujesz zakupu za pomocą linków na naszej stronie, możemy otrzymać prowizję partnerską. Czytaj więcej.

Strefy czasowe są kluczowe dla każdej aplikacji obsługującej daty i godziny. Oczywiście dotyczy to zwłaszcza aplikacji obsługujących użytkowników na różnych kontynentach i w różnych lokalizacjach. Strefy czasowe określają przesunięcie względem uniwersalnego czasu koordynowanego (UTC) dla określonych lokalizacji na całym świecie. Odgrywają one istotną rolę w zapewnieniu dokładnej i niezawodnej obsługi czasu.

Go udostępnia pakiet czasu w swojej standardowej bibliotece do pracy z czasem i strefami czasowymi. Możesz pobierać i konwertować strefy czasowe w różnych lokalizacjach za pomocą pakietu czasowego.

Pakiet czasu

The czas pakiet zapewnia funkcjonalność dla praca z godzinami i datami, mierzenie i wyświetlanie czasu oraz manipulowanie datami za pomocą kalendarza gregoriańskiego bez sekund przestępnych.

Pakiet czasowy zapewnia m.in Czastyp struktury zawierający pole lokalizacji, którego można użyć do ustawienia stref czasowych.

instagram viewer

Możesz zaimportować pakiet czasu za pomocą instrukcji importu.

import"czas"

Oto typ struktury czasu i jego pola. Pola są niewyeksportowane, więc nie ma ich w oficjalnej dokumentacji.

pakiet główny

typ Czas struktura {
// ściana to czas ściany w formacie zwróconym przez runtime.nanotime()
// funkcja.
ściana uint64

// ext to monotoniczny odczyt zegara w formacie zwróconym przez
// runtime.nanotime().
wew int64

// loc jest wskaźnikiem do struktury Location powiązanej z tym czasem.
lok *Lokalizacja
}

typ Lokalizacja struktura {
// nazwa to nazwa strefy czasowej, na przykład „UTC” lub „PST”.
nazwa strunowy

// strefa zawiera informacje o skrócie strefy czasowej, przesunięciu,
// i reguły dla jednej strefy czasowej w lokalizacji.
strefa []strefa

// tx zawiera informacje o tym, kiedy skrót strefy czasowej lub
// zmiany przesunięcia dla lokalizacji.
tx []strefaTrans

// extend zawiera nazwę nadrzędnej strefy czasowej, jeśli ta lokalizacja
// rozciąga się od innego.
rozszerzyć strunowy

// cacheStart i cacheEnd to uniksowe znaczniki czasu określające zakres
// dla którego pole cacheZone jest poprawne.
pamięć podręczna Start int64
koniec pamięci podręcznej int64

// cacheZone wskazuje strefę, która jest aktualnie ważna w danym czasie
// zakres zdefiniowany przez cacheStart i cacheEnd.
strefa pamięci podręcznej *strefa
}

Wiele metod używa metody Time and Lokalizacja struktury, w tym metody stref czasowych.

Ładowanie informacji o strefie czasowej

Ładowanie informacji o strefie czasowej jest jedną z podstawowych operacji podczas pracy ze strefami czasowymi. The ZaładujLokalizacja Metoda zapewnia funkcjonalność do ładowania informacji o strefie czasowej z Baza danych stref czasowych IANA. The ZaładujLokalizacja Metoda pobiera nazwę strefy czasowej i zwraca informacje o lokalizacji oraz błąd do obsługi. Po załadowaniu informacji o strefie czasowej tworzy plik czas struct instancja powiązana ze strefą czasową.

import (
"fmt"
"czas"
)

funkcjagłówny() {
// Załaduj lokalizację strefy czasowej dla America/New_York
loc, błąd := czas. ZaładujLokalizacja(„Ameryka / Nowy Jork”)

Jeśli błąd!= zero {
fmt. println(„Błąd podczas ładowania lokalizacji:”, błąd)
powrót
}

// Uzyskaj aktualny czas w lokalizacji
teraz := czas. Now().In (miejsce)
fmt. println("Aktualny czas w Nowym Jorku:", Teraz)
}

The W metoda tzw Teraz funkcja pobiera lokalizację i drukuje tam czas:

Dodatkowo możesz skorzystać z tzw Stała strefa metodę ładowania bieżącego czasu w lokalizacji, jeśli znasz ciąg lokalizacji i przesunięcie strefy czasowej względem UTC. Najpierw musisz załadować aktualny czas w UTC, a następnie użyjesz metody FixedZone, aby załadować lokalizacja na podstawie ciągu znaków i przesunięcia przed przekazaniem lokalizacji do metody W czasie instancja.

import (
"fmt"
"czas"
)

funkcjagłówny() {
// Pobierz aktualny czas w UTC
teraz := czas. Teraz().UTC()

// Ustaw strefę czasową dla Lagos
lagos := teraz. W samą porę. Stała strefa(„CO”, 3600))

// Wydrukuj aktualny czas w obu lokalizacjach
fmt. println("Aktualny czas w Lagos:", lago)
}

The główny funkcja drukuje aktualny czas w Lagos na konsoli.

Pomiar czasu trwania strefy czasowej

Pakiet czasowy zapewnia Strefa metoda pobierania skrótu i ​​przesunięcia strefy czasowej powiązanej z a czas. Czas wartość. Metoda Zone zwraca ciąg reprezentujący skrót strefy czasowej (np. „EST” dla „America/New_York”) oraz liczbę całkowitą reprezentującą liczbę sekund na wschód od czasu UTC.

import (
"fmt"
"czas"
)

funkcjagłówny() {
// Załaduj lokalizację strefy czasowej dla America/New_York
loc, błąd := czas. ZaładujLokalizacja(„Ameryka / Nowy Jork”)

Jeśli błąd!= zero {
fmt. println(„Błąd podczas ładowania lokalizacji:”, błąd)
powrót
}

// Uzyskaj aktualny czas w UTC i określoną lokalizację
t1 := czas. Teraz()
t2 := t1.In (miejsce)

// Pobierz przesunięcie w sekundach dla każdej strefy czasowej
//dla stref czasowych
_, offset1 := t1.Strefa()
_, offset2 := t2.Strefa()

// Oblicz czas trwania zmiany strefy czasowej
// między UTC a Ameryką/Nowym_Jorkiem
czas trwania := offset2 - offset1

fmt. Drukujf(„Czas trwania zmiany strefy czasowej” +
" między UTC a Nowym Jorkiem to: %d sekund", czas trwania)
}

W funkcji main metoda Zone mierzy czas trwania przesunięcia strefy czasowej między dwiema strefami czasowymi (time. wartości czasowe). The t1 zmienna to aktualny czas w UTC, a zmienna t2 zmienna to bieżąca godzina w strefie czasowej „America/New_York”.

Funkcja drukuje tzw czas trwania zmienna (różnica przesunięcia między strefami czasowymi) reprezentująca zmianę strefy czasowej w sekundach.

Ocena czasu między strefami czasowymi

Możesz oszacować czas między strefami czasowymi, jeśli znasz czas między strefami czasowymi. Możesz użyć Dodać metoda metody In twojego czasu. Instancja struktury czasu, aby dodać czas trwania do czasu w strefie czasowej.

import (
"dziennik"
"czas"// zaimportuj pakiet czasu
)

funkcjaocenaCzas(czas. Czas, czas trwania. Czas trwania)czas.Czas {
// załaduj lokalizację dla Africa/Lagos
lokalizacja, błąd := czas. ZaładujLokalizacja(„Afryka / Lagos”)

Jeśli błąd!= zero {
dziennik. println(„Wystąpił błąd podczas ładowania lokalizacji”)
}

powrót T. W (lokalizacja). Dodaj (czas trwania)
}

The ocenaCzas funkcja zajmuje czas. Wystąpienie czasu i czas trwania typu czas. Czas trwania, zwracając czas w strefie czasowej. Ładuje aktualny czas w „Africa/Lagos” i dodaje czas trwania do czasu.

Manipuluj czasem i datą za pomocą pakietu czasu

Pakiet czasu jest bardzo wszechstronny do pracy zarówno z godzinami, jak i datami. Pakiet time udostępnia funkcje, takie jak Unix() do konwersji czasu na czas uniksowy, Sleep() do wstrzymywania goroutines i Format() do formatowania wartości czasu na ciąg znaków.