시간 문자열을 구문 분석할 때 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" 약어를 인식하지 못할 수 있기 때문에 이런 일이 발생합니다. 대신 이를 알 수 없는 영역으로 해석하고 제로 오프셋을 할당합니다.
이 문제를 방지하려면 다음 중 하나를 수행할 수 있습니다.
const format = "2006 01 02 15:04 -0400" tn, _ := time.Parse(format, date)
aloc, _ := time.LoadLocation("America/New_York") tn, _ := time.ParseInLocation(format, date, aloc)
이러한 기술을 사용하여 시간대 정보가 올바르게 해석되고 구문 분석된 시간이 의도한 오프셋을 정확하게 반영하는지 확인합니다.
위 내용은 Go의 `time.Parse()`가 시간대 식별자를 잘못 해석하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!