Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menetapkan zon waktu dalam bahasa go

Cara menetapkan zon waktu dalam bahasa go

青灯夜游
青灯夜游asal
2023-01-09 10:27:453462semak imbas

Dua kaedah tetapan: 1. Zon waktu tetap, sintaks "var c = time.FixedZone("CST", 8*3600)" dan "time.Now().In(c).Format(" Masa ")"; 2. Muatkan zon masa, sintaks "var c, _ = time.LoadLocation("Asia/Shanghai")" dan "time.Now().In(c).Format("time")".

Cara menetapkan zon waktu dalam bahasa go

Persekitaran pengendalian tutorial ini: sistem Windows 7, GO versi 1.18, komputer Dell G3.

Pembahagian zon waktu

Dunia menggunakan Greenwich, London, England sebagai titik permulaan longitud sifar, dan setiap 15 longitud adalah zon waktu, 15 darjah Meridian ialah meridian tengah zon waktu, yang dibahagikan kepada 24 zon waktu. Zon waktu bertambah setiap 15 darjah longitud dari barat ke timur, dan sebaliknya, zon waktu berkurangan setiap 15 darjah longitud ke barat. Zon waktu China ialah 8 Timur.

Format masa

Masa semasatime.Now()Mengembalikan masa dalam zon waktu tempatan:

func main() {
    t := time.Now()  
    fmt.Println(t) //2020-12-16 09:34:19.5828312 +0800 CST m=+0.004002201
}

Masa CST

CST boleh mewakili empat zon waktu berbeza berikut:

  • Waktu Piawai Pusat (AS) UT-6:00: Waktu Piawai Amerika Syarikat
  • Waktu Piawai Tengah (Australia) UT+9:30:Waktu Piawai Australia
  • Waktu Piawai China UT+8:00:Waktu Piawai China
  • Waktu Piawai Cuba UT-4: 00: Waktu Piawai Cuba

time.Now() +0800 CST yang dikembalikan mewakili Waktu Piawai China, dan penukaran kepada waktu UTC adalah seperti berikut:

GMT + 8 = UTC + 8 = CST

Monotonic Jam dan Jam Dinding

Jam Dinding mewakili masa jam dinding dan menyimpan cap waktu sejak 0:00:00 pada 1 Januari 1970. Apabila sistem dan pelayan pemasaan menjalankan operasi masa penentukuran, Ada kemungkinan bahawa detik ini ialah 2018-1-1 00:00:00, dan detik seterusnya menjadi 2017-12-31 23:59:59.
Jam Monotonic bermaksud masa monotonic yang dipanggil monotonik bermakna ia hanya akan terus berkembang ke hadapan dan tidak akan terjejas oleh operasi pelarasan masa.
time.Now()Yang dikembalikan m=+0.004002201 bermaksud Jam Monotonic

Tetapan zon waktu

Jika zon waktu yang ditentukan tidak ditetapkan dalam bahasa go , apa yang diperoleh melalui time.Now() ialah zon waktu tempatan:

func main() {
    t := time.Now()   //返回本地时区格式
    fmt.Println(t)
}

Bahasa go tidak mempunyai perkara seperti menetapkan zon waktu secara global Setiap kali masa dikeluarkan, a Fungsi In() perlu dipanggil untuk menukar zon waktu.

Terdapat dua cara untuk menetapkan zon waktu:

1 Zon waktu tetap (disyorkan)

var cstZone = time.FixedZone("CST", 8*3600)         // 东八
fmt.Println(time.Now().In(cstZone).Format("2006-01-02 15:04:05"))

Betulkan zon waktu kepada. Daerah Kelapan Timur. Tetapi ini bukan tetapan global untuk program Anda perlu membetulkan zon waktu

setiap kali anda mendapatkannya 2. Muatkan zon waktu

var cstSh, _ = time.LoadLocation("Asia/Shanghai") //  上海
fmt.Println(time.Now().In(cstSh).Format("2006-01-02 15:04:05"))

untuk memuatkan masa yang ditentukan. zon. Tetapi jika anda menggunakan kaedah ini tanpa persekitaran go, pemuatan akan gagal, kerana maklumat zon waktu diletakkan dalam pakej pemasangan go.

Nota: Konfigurasikan zon waktu dalam docker

Jika anda menggunakan kaedah kedua untuk memuatkan zon waktu, anda perlu mengkonfigurasi zon waktu semasa membina imej docker Fail konfigurasi adalah seperti berikut :

FROM golang:alpine as build
RUN apk --no-cache add tzdata  //构建阶段加载时区
WORKDIR /app
ADD . /app
RUN CGO_ENABLED=0 GOOS=linux go build -o myapp

FROM scratch as final

COPY --from=build /app/myapp .
### 下面这行是新加的,复制时区相关的信息到最终镜像中,否则程序会找不到改时区
COPY --from=build /usr/share/zoneinfo /usr/share/zoneinfo
ENV TZ=Asia/Shanghai  //在最终阶段设置时区环境变量

CMD ["/myapp"]

[Cadangan berkaitan: Pergi tutorial video, Pengajaran pengaturcaraan]

Atas ialah kandungan terperinci Cara menetapkan zon waktu dalam bahasa go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn