> 백엔드 개발 > Golang > `time.Parse`를 사용하여 다른 시간대를 지정했음에도 불구하고 내 Go 코드가 항상 UTC 시간을 반환하는 이유는 무엇입니까?

`time.Parse`를 사용하여 다른 시간대를 지정했음에도 불구하고 내 Go 코드가 항상 UTC 시간을 반환하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-29 11:28:12
원래의
947명이 탐색했습니다.

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

시간대 코드 구문 분석: 심층 분석

이전의 시간대 코드 구문 분석 시도에서 아래 코드는 일관되게 "[date] 05:00:00라는 결과를 산출했습니다. 0000 UTC"는parseAndPrint에 대해 선택한 시간대에 관계없이 function.

// 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())
}
로그인 후 복사

이 문제는 time.Parse가 현재 위치의 시간을 해석하는데 의도한 시간대와 일치하지 않을 수 있다는 사실에서 발생합니다.

문제 해결: 시간대 컨텍스트 이해

시간대 코드를 정확하게 구문 분석하려면 time.Location을 사용하는 것이 올바른 접근 방식입니다. 향상된 구현은 다음과 같습니다.

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())
}
로그인 후 복사

이 업데이트된 코드에서는

  • time.LoadLocation(timezone)이 지정된 시간대 위치를 로드합니다.
  • time.ParseInLocation( "15:04:05 MST", "05:00:00", 위치)는 시간을 구문 분석합니다. 지정된 시간대 위치의 "05:00:00"입니다. 그러면 의도한 시간대의 정확한 시간이 나옵니다.

위 내용은 `time.Parse`를 사용하여 다른 시간대를 지정했음에도 불구하고 내 Go 코드가 항상 UTC 시간을 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿