>백엔드 개발 >Golang >Go의 `time.Parse()`가 시간대 식별자를 잘못 해석하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Go의 `time.Parse()`가 시간대 식별자를 잘못 해석하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-26 12:10:14198검색

Why Does Go's `time.Parse()` Misinterpret Timezone Identifiers and How Can I Fix It?

time.Parse()가 시간대 식별자를 구문 분석하지 않는 이유

시간 문자열을 구문 분석할 때 Go의 time.Parse()는 포함된 시간대 식별자를 해석하려고 시도합니다. 현재 위치를 기준으로 합니다. 시간대를 알 수 없는 경우 Parse()는 해당 약어와 오프셋이 0인 조작된 위치에 있다고 가정합니다.

다음 코드 조각을 고려하세요.

const format = "2006 01 02 15:04 MST"
date := "2018 08 01 12:00 EDT"
tn, _ := time.Parse(format, date)

여기서 레이아웃을 정의합니다. 시간대 식별자 "EDT"를 포함하는 날짜 문자열의 형식을 지정하고 구문 분석합니다. 그러나 구문 분석된 시간을 인쇄하면 다음과 같은 결과가 나타납니다.

2018-08-01 12:00:00 +0000 EDT

EDT가 UTC에서 -0400 오프셋을 갖는 일광 절약 시간대임에도 불구하고 시간대가 "0000 EDT"로 표시됩니다.

Parse()가 현재 시스템 위치에 의존하여 "EDT" 약어를 인식하지 못할 수 있기 때문에 이런 일이 발생합니다. 대신 이를 알 수 없는 영역으로 해석하고 제로 오프셋을 할당합니다.

이 문제를 방지하려면 다음 중 하나를 수행할 수 있습니다.

  1. 시간대 오프셋을 명시적으로 지정하는 시간 레이아웃을 사용합니다.
const format = "2006 01 02 15:04 -0400"
tn, _ := time.Parse(format, date)
  1. ParseInLocation()을 사용하여 원하는 위치를 지정하세요. 시간대:
aloc, _ := time.LoadLocation("America/New_York")
tn, _ := time.ParseInLocation(format, date, aloc)

이러한 기술을 사용하여 시간대 정보가 올바르게 해석되고 구문 분석된 시간이 의도한 오프셋을 정확하게 반영하는지 확인합니다.

위 내용은 Go의 `time.Parse()`가 시간대 식별자를 잘못 해석하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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