>백엔드 개발 >Golang >시간대가 관련되어 있는데 Go의 `time.Parse`가 문자열을 `time.Time` 인스턴스로 변환하지 못하는 이유는 무엇입니까?

시간대가 관련되어 있는데 Go의 `time.Parse`가 문자열을 `time.Time` 인스턴스로 변환하지 못하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-17 00:50:03204검색

Why does `time.Parse` in Go fail to convert a string to a `time.Time` instance when timezone is involved?

time.Parse 동작 이해

Go의 time 패키지에서 Parse 메서드를 사용하여 문자열을 time.Time 인스턴스로 변환할 때, 시간대를 고려하고 적절한 형식 문자열을 제공하는 것이 중요합니다. 다음 코드는 잘못된 시간대 처리로 인해 예상대로 문자열을 time.Time으로 변환하지 못합니다.

import (
    "fmt"
    "time"
)

func main() {
    const longForm = "2013-05-13T18:41:34.848Z"
    t, _ := time.Parse(longForm, "2013-05-13 18:41:34.848 -0700 PDT")
    fmt.Println(t)
}

이 코드는 예상된 값 대신 0001-01-01 00:00:00 0000 UTC를 인쇄합니다. 2013-05-13 01:41:34.848 0000 UTC.

해결책: 올바른 형식 문자열 지정

잘못된 형식 문자열로 인해 잘못된 동작이 발생합니다. longForm은 입력 문자열의 형식과 일치하도록 정의되어야 합니다.

const longForm = "2006-01-02 15:04:05 -0700"

이 형식 문자열은 입력 문자열의 형식에 해당합니다: 2013-05-13 18:41:34.848 -0700 PDT.

업데이트됨 코드:

import (
    "fmt"
    "log"
    "time"
)

func main() {
    const longForm = "2006-01-02 15:04:05 -0700"
    t, err := time.Parse(longForm, "2013-05-13 18:41:34.848 -0700 PDT")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(t)
}

올바른 형식 문자열을 사용하면 코드는 이제 예상 시간인 2013-05-13 01:41:34.848 0000 UTC를 출력합니다.

위 내용은 시간대가 관련되어 있는데 Go의 `time.Parse`가 문자열을 `time.Time` 인스턴스로 변환하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.