From be6b414ac9353c1fa73fbaf554baa080cbc915b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Mon, 25 Jul 2022 21:00:52 +0200 Subject: [PATCH] Correctly determine IANA Time Zone name Maintaining a list of UTC mappings internally wasn't a great approach due to these mappings being innacurate during DST. --- go.mod | 1 + go.sum | 4 ++++ internal/api/http.go | 48 ++++---------------------------------------- 3 files changed, 9 insertions(+), 44 deletions(-) diff --git a/go.mod b/go.mod index 23388ed..419acc6 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( github.com/henvic/httpretty v0.0.6 github.com/kr/pretty v0.1.0 // indirect github.com/stretchr/testify v1.7.0 + github.com/thlib/go-timezone-local v0.0.0-20210907160436-ef149e42d28e gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect gopkg.in/h2non/gock.v1 v1.1.2 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 3643d40..83b2380 100644 --- a/go.sum +++ b/go.sum @@ -22,10 +22,14 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/thlib/go-timezone-local v0.0.0-20210907160436-ef149e42d28e h1:BuzhfgfWQbX0dWzYzT1zsORLnHRv3bcRcsaUk0VmXA8= +github.com/thlib/go-timezone-local v0.0.0-20210907160436-ef149e42d28e/go.mod h1:/Tnicc6m/lsJE0irFMA0LfIwTBo4QP7A8IfyIv4zZKI= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e h1:XMgFehsDnnLGtjvjOfqWSUzt0alpTR1RSEuznObga2c= +golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/internal/api/http.go b/internal/api/http.go index 4104057..f492e49 100644 --- a/internal/api/http.go +++ b/internal/api/http.go @@ -13,6 +13,7 @@ import ( "github.com/cli/go-gh/pkg/api" "github.com/henvic/httpretty" + "github.com/thlib/go-timezone-local/tzlocal" ) const ( @@ -29,46 +30,6 @@ const ( var jsonTypeRE = regexp.MustCompile(`[/+]json($|;)`) -var timeZoneNames = map[int]string{ - -39600: "Pacific/Niue", - -36000: "Pacific/Honolulu", - -34200: "Pacific/Marquesas", - -32400: "America/Anchorage", - -28800: "America/Los_Angeles", - -25200: "America/Chihuahua", - -21600: "America/Chicago", - -18000: "America/Bogota", - -14400: "America/Caracas", - -12600: "America/St_Johns", - -10800: "America/Argentina/Buenos_Aires", - -7200: "Atlantic/South_Georgia", - -3600: "Atlantic/Cape_Verde", - 0: "Europe/London", - 3600: "Europe/Amsterdam", - 7200: "Europe/Athens", - 10800: "Europe/Istanbul", - 12600: "Asia/Tehran", - 14400: "Asia/Dubai", - 16200: "Asia/Kabul", - 18000: "Asia/Tashkent", - 19800: "Asia/Kolkata", - 20700: "Asia/Kathmandu", - 21600: "Asia/Dhaka", - 23400: "Asia/Rangoon", - 25200: "Asia/Bangkok", - 28800: "Asia/Manila", - 31500: "Australia/Eucla", - 32400: "Asia/Tokyo", - 34200: "Australia/Darwin", - 36000: "Australia/Brisbane", - 37800: "Australia/Adelaide", - 39600: "Pacific/Guadalcanal", - 43200: "Pacific/Nauru", - 46800: "Pacific/Auckland", - 49500: "Pacific/Chatham", - 50400: "Pacific/Kiritimati", -} - func NewHTTPClient(opts *api.ClientOptions) http.Client { if opts == nil { opts = &api.ClientOptions{} @@ -214,10 +175,9 @@ func newUnixDomainSocketRoundTripper(socketPath string) http.RoundTripper { } func currentTimeZone() string { - tz := time.Local.String() - if tz == "Local" { - _, offset := time.Now().Zone() - tz = timeZoneNames[offset] + tz, err := tzlocal.RuntimeTZ() + if err != nil { + return "" } return tz }