Pembaca seperti Anda membantu mendukung MUO. Saat Anda melakukan pembelian menggunakan tautan di situs kami, kami dapat memperoleh komisi afiliasi. Baca selengkapnya.

Zona waktu sangat penting untuk aplikasi apa pun yang berhubungan dengan tanggal dan waktu. Tentu saja, ini terutama berlaku untuk aplikasi yang melayani pengguna lintas benua dan lokasi. Zona waktu menentukan offset dari Waktu Universal Terkoordinasi (UTC) untuk lokasi tertentu di seluruh dunia. Mereka memainkan peran penting dalam memastikan penanganan waktu yang akurat dan andal.

Go menyediakan paket waktu di pustaka standarnya untuk bekerja dengan waktu dan zona waktu. Anda dapat mengambil dan mengonversi zona waktu di berbagai lokasi menggunakan paket waktu.

Paket Waktu

Itu waktu paket menyediakan fungsionalitas untuk bekerja dengan waktu dan tanggal, mengukur dan menampilkan waktu, dan memanipulasi tanggal menggunakan kalender Gregorian tanpa detik kabisat.

Paket waktu menyediakan a Waktutipe struct berisi bidang lokasi yang dapat Anda gunakan untuk mengatur zona waktu.

instagram viewer

Anda dapat mengimpor paket waktu dengan pernyataan impor.

impor"waktu"

Inilah tipe struct waktu dan bidangnya. Bidang tidak diekspor, jadi tidak ada dalam dokumentasi resmi.

kemasan utama

jenis Waktu struct {
// dinding adalah waktu dinding dalam format yang dikembalikan oleh runtime.nanotime()
// fungsi.
dinding uint64

// ext adalah pembacaan jam monoton dalam format yang dikembalikan oleh
// runtime.nanotime().
ext int64

// loc adalah pointer ke struct Lokasi yang terkait dengan waktu ini.
loc * Lokasi
}

jenis Lokasi struct {
// nama adalah nama zona waktu, seperti "UTC" atau "PST".
nama rangkaian

// zona berisi informasi tentang singkatan zona waktu, offset,
// dan aturan untuk satu zona waktu di lokasi.
zona []zona

// tx berisi informasi tentang kapan singkatan zona waktu atau
// mengimbangi perubahan untuk suatu lokasi.
tx []zoneTrans

// perpanjang berisi nama zona waktu induk jika lokasi ini
// meluas dari yang lain.
memperpanjang rangkaian

// cacheStart dan cacheEnd adalah stempel waktu Unix yang menentukan rentang
// yang bidang cacheZone valid.
cacheStart int64
cacheEnd int64

// cacheZone menunjuk ke zona yang saat ini valid untuk waktu itu
// rentang yang ditentukan oleh cacheStart dan cacheEnd.
cacheZone *zona
}

Banyak metode menggunakan Waktu dan Lokasi struct, termasuk metode zona waktu.

Memuat Informasi Zona Waktu

Memuat Informasi Zona Waktu adalah salah satu operasi dasar saat bekerja dengan zona waktu. Itu LoadLocation metode menyediakan fungsionalitas untuk memuat informasi zona waktu dari Basis Data Zona Waktu IANA. Itu LoadLocation metode mengambil nama zona waktu dan mengembalikan informasi lokasi dan kesalahan penanganan. Setelah memuat informasi zona waktu, itu membuat a waktu struct instance yang terkait dengan zona waktu.

impor (
"fmt"
"waktu"
)

fungsiutama() {
// Muat lokasi zona waktu untuk Amerika/New_York
loc, err := waktu. MemuatLokasi("Amerika/New_York")

jika salah!= nol {
fmt. Cetak("Kesalahan memuat lokasi:", salah)
kembali
}

// Dapatkan waktu saat ini di suatu lokasi
sekarang := waktu. Sekarang().Dalam (lokasi)
fmt. Cetak("Waktu saat ini di New York:", Sekarang)
}

Itu Di dalam metode dari Sekarang fungsi mengambil lokasi dan mencetak waktu di sana:

Selain itu, Anda dapat menggunakan FixedZone metode untuk memuat waktu saat ini di suatu lokasi jika Anda mengetahui string lokasi dan offset zona waktu dari UTC. Pertama, Anda harus memuat waktu saat ini dalam UTC, lalu Anda akan menggunakan metode FixedZone untuk memuat lokasi berdasarkan string dan offset sebelum meneruskan lokasi ke metode In the time contoh.

impor (
"fmt"
"waktu"
)

fungsiutama() {
// Dapatkan waktu saat ini di UTC
sekarang := waktu. Sekarang().UTC()

// Tetapkan zona waktu untuk Lagos
lagos := sekarang. Pada waktunya. Zona Tetap("WAT", 3600))

// Cetak waktu saat ini di kedua lokasi
fmt. Cetak("Waktu saat ini di Lagos:", lagos)
}

Itu utama fungsi mencetak waktu saat ini di Lagos ke konsol.

Mengukur Durasi Zona Waktu

Paket waktu menyediakan Daerah metode untuk mengambil singkatan dan offset zona waktu yang terkait dengan a waktu. Waktu nilai. Metode Zone mengembalikan string yang mewakili singkatan zona waktu (mis. "EST" untuk "America/New_York") dan bilangan bulat yang mewakili jumlah detik di timur UTC.

impor (
"fmt"
"waktu"
)

fungsiutama() {
// Muat lokasi zona waktu untuk Amerika/New_York
loc, err := waktu. MemuatLokasi("Amerika/New_York")

jika salah!= nol {
fmt. Cetak("Kesalahan memuat lokasi:", salah)
kembali
}

// Dapatkan waktu saat ini di UTC dan lokasi yang ditentukan
t1 := waktu. Sekarang()
t2 := t1.Dalam (lokasi)

// Dapatkan offset dalam hitungan detik untuk setiap zona waktu
// untuk zona waktu
_, offset1 := t1.Zone()
_, offset2 := t2.Zone()

// Hitung durasi pergeseran zona waktu
// antara UTC dan Amerika/New_York
durasi := offset2 - offset1

fmt. Cetakf("Durasi pergeseran zona waktu" +
" antara UTC dan New York adalah: %d detik", durasi)
}

Pada fungsi utama, metode Zone mengukur durasi pergeseran zona waktu antara dua zona waktu (time. nilai waktu). Itu t1 variabel adalah waktu saat ini di UTC, dan t2 variabel adalah waktu saat ini di zona waktu "Amerika/New_York".

Fungsi mencetak durasi variabel (perbedaan offset antara zona waktu) yang mewakili pergeseran zona waktu dalam detik.

Mengevaluasi Waktu Antar Zona Waktu

Anda dapat mengevaluasi waktu antar zona waktu jika Anda mengetahui durasi antar zona waktu. Anda dapat menggunakan Menambahkan metode metode Dalam waktu Anda. Instance struct waktu untuk menambahkan durasi ke waktu dalam zona waktu.

impor (
"catatan"
"waktu"// impor paket waktu
)

fungsiwaktu evaluasi(t waktu. Waktu, durasi waktu. Durasi)waktu.Waktu {
// muat lokasi untuk Afrika/Lagos
lokasi, err := waktu. MemuatLokasi("Afrika/Lagos")

jika salah!= nol {
catatan. Cetak("Terjadi kesalahan saat memuat lokasi")
}

kembali T. Di (lokasi).Tambahkan (durasi)
}

Itu waktu evaluasi fungsi membutuhkan waktu. Contoh waktu dan jenis durasi waktu. Durasi, menampilkan waktu di zona waktu. Itu memuat waktu saat ini di "Afrika/Lagos" dan menambahkan durasi waktu.

Memanipulasi Waktu dan Tanggal Dengan Paket Waktu

Paket waktu sangat serbaguna untuk bekerja dengan waktu dan tanggal. Paket waktu menyediakan fungsi seperti Unix() untuk mengonversi waktu ke waktu Unix, Sleep() untuk menjeda goroutine, dan Format() untuk memformat nilai waktu menjadi string.