Rumah >pembangunan bahagian belakang >Golang >Mengapa Kod Go Saya Sentiasa Mengembalikan Waktu UTC Walaupun Menentukan Zon Waktu Berbeza Menggunakan `time.Parse`?

Mengapa Kod Go Saya Sentiasa Mengembalikan Waktu UTC Walaupun Menentukan Zon Waktu Berbeza Menggunakan `time.Parse`?

Barbara Streisand
Barbara Streisandasal
2024-11-29 11:28:12940semak imbas

Why Does My Go Code Always Return UTC Time Despite Specifying Different Time Zones Using `time.Parse`?

Menghuraikan Kod Zon Waktu: Menyelam Lebih Dalam

Dalam percubaan sebelumnya untuk menghuraikan kod zon waktu, kod di bawah secara konsisten menghasilkan hasil "[tarikh] 05:00:00 0000 UTC" tanpa mengira zon waktu yang dipilih untuk parseAndPrint fungsi.

// time testing with arbitrary format
package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    parseAndPrint(now, "BRT")
    parseAndPrint(now, "EDT")
    parseAndPrint(now, "UTC")
}

func parseAndPrint(now time.Time, timezone string) {
    test, err := time.Parse("15:04:05 MST", fmt.Sprintf("05:00:00 %s", timezone))
    if err != nil {
        fmt.Println(err)
        return
    }

    test = time.Date(
        now.Year(),
        now.Month(),
        now.Day(),
        test.Hour(),
        test.Minute(),
        test.Second(),
        test.Nanosecond(),
        test.Location(),
    )

    fmt.Println(test.UTC())
}

Isu ini berpunca daripada fakta bahawa masa.Parse mentafsir masa di lokasi semasa, yang mungkin tidak sepadan dengan zon waktu yang dimaksudkan.

Menyelesaikan Masalah: Memahami Konteks Zon Waktu

Untuk menghuraikan kod zon waktu dengan tepat, pendekatan yang betul melibatkan penggunaan masa.Lokasi. Berikut ialah pelaksanaan yang dipertingkatkan:

func parseAndPrint(now time.Time, timezone string) {
    location, err := time.LoadLocation(timezone)
    if err != nil {
        fmt.Println(err)
        return
    }

    test, err := time.ParseInLocation("15:04:05 MST", "05:00:00", location)
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println(test.UTC())
}

Dalam kod yang dikemas kini ini:

  • masa.LoadLocation(zon waktu) memuatkan lokasi zon waktu yang ditentukan.
  • masa.ParseInLocation( "15:04:05 MST", "05:00:00", lokasi) menghuraikan masa "05:00:00" dalam lokasi zon waktu yang ditentukan. Ini menghasilkan masa yang betul dalam zon waktu yang dimaksudkan.

Atas ialah kandungan terperinci Mengapa Kod Go Saya Sentiasa Mengembalikan Waktu UTC Walaupun Menentukan Zon Waktu Berbeza Menggunakan `time.Parse`?. 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