Go의 시간대 구문 분석 이해
Go의 시간대 코드 구문 분석에는 시간대의 문자열 표현을 해당 *시간으로 변환하는 작업이 포함됩니다. .위치 개체. 그러나 특정 시나리오에서는 구문 분석된 결과가 원하는 시간대를 정확하게 반영하지 않을 수 있습니다. 이 문서에서는 시간대 구문 분석의 일반적인 문제를 살펴보고 해결 방법을 제공합니다.
문제 공식화
다음 코드를 고려하세요.
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()) }
실행할 때 이 코드에서는 출력에 관계없이 항상 "[날짜] 05:00:00 0000 UTC"가 표시됩니다. 지정된 시간대. 이는 코드가 현재 위치의 시간을 구문 분석한 다음 시간대를 명시적으로 UTC로 설정하기 때문입니다.
해결책: time.Location 사용
올바르게 처리하려면 시간대 구문 분석을 수행하려면 *time.Location 유형을 사용해야 합니다. time.LoadLocation을 사용하여 현지 시간대 데이터베이스에서 위치를 로드한 다음 time.ParseInLocation을 사용하여 시간을 구문 분석할 수 있습니다. 수정된 코드는 다음과 같습니다.
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) { 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) }
이제 코드는 시간대별 시간을 올바르게 구문 분석하고 원하는 시간대 형식으로 결과를 인쇄합니다.
위 내용은 Go의 `time.Parse`가 시간대를 정확하게 구문 분석하지 못하는 이유는 무엇이며 이 문제를 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!