├── .github ├── FUNDING.yml └── workflows │ └── test.yaml ├── LICENSE ├── README.md ├── example_test.go ├── go.mod ├── timezone.go ├── timezone_test.go ├── timezones.go ├── tools ├── gen-var-timezones.py ├── gen-var-tzabbrinfos.py └── gen-var-tzinfos.py ├── tz_abbr_infos.go ├── tz_infos.go └── tzinfo.go /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: tkuchiki 4 | -------------------------------------------------------------------------------- /.github/workflows/test.yaml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | on: 4 | push: 5 | 6 | jobs: 7 | test: 8 | runs-on: ubuntu-18.04 9 | strategy: 10 | matrix: 11 | go: [ '1.16', '1.15', '1.14', '1.13', '1.12' ] 12 | steps: 13 | - uses: actions/setup-go@v1 14 | with: 15 | go-version: ${{ matrix.go }} 16 | id: go 17 | - run: mkdir -p src/github.com/tkuchiki 18 | - uses: actions/checkout@v2 19 | with: 20 | path: src/github.com/tkuchiki/go-timezone 21 | - run: go test -v 22 | working-directory: /home/runner/work/go-timezone/go-timezone/src/github.com/tkuchiki/go-timezone 23 | env: 24 | GOPATH: /home/runner/work/go-timezone/go-timezone 25 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 tkuchiki 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # go-timezone 2 | 3 | [![GoDocWidget]][GoDocReference] ![Test](https://github.com/tkuchiki/go-timezone/workflows/Test/badge.svg) 4 | 5 | [GoDocWidget]:https://godoc.org/github.com/tkuchiki/go-timezone?status.svg 6 | [GoDocReference]:https://godoc.org/github.com/tkuchiki/go-timezone 7 | 8 | ---- 9 | 10 | go-timezone is timezone utility for Go. 11 | 12 | It has the following features: 13 | 14 | - This library uses only the standard package 15 | - Supports getting offset from timezone abbreviation, which is not supported by the time package 16 | - Determine whether the specified time.Time is daylight saving time 17 | - Change the location of time.Time by specifying the timezone 18 | 19 | See [godoc][GoDocReference] for usage. 20 | 21 | ## Data source 22 | 23 | https://github.com/tkuchiki/timezones 24 | 25 | # Contributors 26 | 27 | - [@alex-tan](https://github.com/alex-tan) 28 | - [@kkavchakHT](https://github.com/kkavchakHT) 29 | - [@scottleedavis](https://github.com/scottleedavis) 30 | - [@sashabaranov](https://github.com/sashabaranov) 31 | -------------------------------------------------------------------------------- /example_test.go: -------------------------------------------------------------------------------- 1 | package timezone_test 2 | 3 | import ( 4 | "fmt" 5 | "time" 6 | 7 | "github.com/tkuchiki/go-timezone" 8 | ) 9 | 10 | func ExampleTimezone_GetTzAbbreviationInfo() { 11 | tz := timezone.New() 12 | tzAbbrInfos, _ := tz.GetTzAbbreviationInfo("EET") 13 | 14 | fmt.Println(tzAbbrInfos[0].Name()) 15 | fmt.Println(tzAbbrInfos[0].Offset()) 16 | fmt.Println(tzAbbrInfos[0].OffsetHHMM()) 17 | // Output: 18 | // Eastern European Time/Eastern European Standard Time 19 | // 7200 20 | // +02:00 21 | } 22 | 23 | func ExampleTimezone_GetTzAbbreviationInfo_ambiguousTimezoneAbbreviationsError() { 24 | tz := timezone.New() 25 | tzAbbrInfos, _ := tz.GetTzAbbreviationInfo("BST") 26 | 27 | fmt.Println(tzAbbrInfos[0].Name()) 28 | fmt.Println(tzAbbrInfos[0].Offset()) 29 | fmt.Println(tzAbbrInfos[0].OffsetHHMM()) 30 | fmt.Println(tzAbbrInfos[1].Name()) 31 | fmt.Println(tzAbbrInfos[1].Offset()) 32 | fmt.Println(tzAbbrInfos[1].OffsetHHMM()) 33 | fmt.Println(tzAbbrInfos[2].Name()) 34 | fmt.Println(tzAbbrInfos[2].Offset()) 35 | fmt.Println(tzAbbrInfos[2].OffsetHHMM()) 36 | // Output: 37 | // Bolivia Summer Time 38 | // -12756 39 | // -03:27 40 | // British Summer Time 41 | // 3600 42 | // +01:00 43 | // Bougainville Standard Time 44 | // 39600 45 | // +11:00 46 | } 47 | 48 | func ExampleTimezone_GetTzAbbreviationInfoByTZName() { 49 | tz := timezone.New() 50 | tzAbbrInfo, _ := tz.GetTzAbbreviationInfoByTZName("BST", "British Summer Time") 51 | 52 | fmt.Println(tzAbbrInfo.Name()) 53 | fmt.Println(tzAbbrInfo.Offset()) 54 | fmt.Println(tzAbbrInfo.OffsetHHMM()) 55 | // Output: 56 | // British Summer Time 57 | // 3600 58 | // +01:00 59 | } 60 | 61 | func ExampleTimezone_GetTimezones() { 62 | tz := timezone.New() 63 | timezones, _ := tz.GetTimezones("UTC") 64 | 65 | fmt.Println(timezones) 66 | // Output: 67 | // [Etc/UCT Etc/UTC Etc/Universal Etc/Zulu UCT UTC Universal Zulu] 68 | } 69 | 70 | func ExampleTimezone_FixedTimezone() { 71 | tz := timezone.New() 72 | 73 | _time := time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC) 74 | fixedTime, _ := tz.FixedTimezone(_time, "Europe/Belgrade") 75 | 76 | fmt.Println(fixedTime) 77 | // Output: 78 | // 2020-01-01 01:00:00 +0100 CET 79 | } 80 | 81 | func ExampleTimezone_GetTzInfo() { 82 | tz := timezone.New() 83 | tzInfo, _ := tz.GetTzInfo("Europe/London") 84 | 85 | fmt.Println(tzInfo.LongStandard()) 86 | fmt.Println(tzInfo.ShortStandard()) 87 | fmt.Println(tzInfo.StandardOffset()) 88 | fmt.Println(tzInfo.StandardOffsetHHMM()) 89 | fmt.Println(tzInfo.LongDaylight()) 90 | fmt.Println(tzInfo.ShortDaylight()) 91 | fmt.Println(tzInfo.DaylightOffset()) 92 | fmt.Println(tzInfo.DaylightOffsetHHMM()) 93 | // Output: 94 | // Greenwich Mean Time 95 | // GMT 96 | // 0 97 | // +00:00 98 | // British Summer Time 99 | // BST 100 | // 3600 101 | // +01:00 102 | } 103 | 104 | func ExampleTimezone_GetTimezoneAbbreviation() { 105 | tz := timezone.New() 106 | 107 | abbr, _ := tz.GetTimezoneAbbreviation("Europe/London") 108 | 109 | fmt.Println(abbr) 110 | // Output: 111 | // GMT 112 | } 113 | 114 | func ExampleTimezone_GetTimezoneAbbreviation_dst() { 115 | tz := timezone.New() 116 | 117 | abbr, _ := tz.GetTimezoneAbbreviation("Europe/London", true) 118 | 119 | fmt.Println(abbr) 120 | // Output: 121 | // BST 122 | } 123 | 124 | func ExampleTimezone_IsDST() { 125 | tz := timezone.New() 126 | 127 | loc, _ := time.LoadLocation("America/New_York") 128 | _time := time.Date(2021, 7, 1, 0, 0, 0, 0, loc) 129 | isDST := tz.IsDST(_time) 130 | 131 | _time = time.Date(2021, 1, 1, 0, 0, 0, 0, loc) 132 | isNotDST := tz.IsDST(_time) 133 | fmt.Println(isDST) 134 | fmt.Println(isNotDST) 135 | // Output: 136 | // true 137 | // false 138 | } 139 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/tkuchiki/go-timezone 2 | 3 | go 1.16 4 | -------------------------------------------------------------------------------- /timezone.go: -------------------------------------------------------------------------------- 1 | // Package timezone provides utility for timezone. 2 | package timezone 3 | 4 | import ( 5 | "errors" 6 | "fmt" 7 | "strings" 8 | "time" 9 | ) 10 | 11 | var ( 12 | // ErrAmbiguousTzAbbreviations indicates ambiguous timezone abbreviations. 13 | ErrAmbiguousTzAbbreviations = errors.New("Ambiguous timezone abbreviations") 14 | 15 | errFormatInvalidTz = "Invalid timezone: %s" 16 | errFormatInvalidTzAbbreviation = "Invalid timezone abbreviation: %s" 17 | errFormatInvalidTzName = "Invalid timezone name: %s %s" 18 | errFormatDoesNotHaveDST = "Does not have daylight savings: %s" 19 | ) 20 | 21 | // Timezone represents a timezone information. 22 | type Timezone struct { 23 | tzInfos map[string]*TzInfo 24 | tzAbbrInfos map[string][]*TzAbbreviationInfo 25 | timezones map[string][]string 26 | } 27 | 28 | // New creates a new Timezone. 29 | func New() *Timezone { 30 | return &Timezone{ 31 | tzInfos: tzInfos, 32 | tzAbbrInfos: tzAbbrInfos, 33 | timezones: timezones, 34 | } 35 | } 36 | 37 | // TzInfos returns the all tzInfos. 38 | func (tz *Timezone) TzInfos() map[string]*TzInfo { 39 | return tz.tzInfos 40 | } 41 | 42 | // TzAbbrInfos returns the all tzAbbrInfos. 43 | func (tz *Timezone) TzAbbrInfos() map[string][]*TzAbbreviationInfo { 44 | return tz.tzAbbrInfos 45 | } 46 | 47 | // Timezones returns the all timezones. 48 | func (tz *Timezone) Timezones() map[string][]string { 49 | return tz.timezones 50 | } 51 | 52 | // GetAllTimezones returns the timezones. 53 | // 54 | // Deprecated: Use Timezones. 55 | func (tz *Timezone) GetAllTimezones() map[string][]string { 56 | return tz.timezones 57 | } 58 | 59 | // GetTzAbbreviationInfo returns the slice of TzAbbreviationInfo with the given timezone abbreviation. 60 | // Returns a ErrAmbiguousTzAbbreviations error if timezone abbreviation has more than one meaning. 61 | func (tz *Timezone) GetTzAbbreviationInfo(abbr string) ([]*TzAbbreviationInfo, error) { 62 | err := fmt.Errorf(errFormatInvalidTzAbbreviation, abbr) 63 | if _, ok := tz.tzAbbrInfos[abbr]; !ok { 64 | return nil, err 65 | } 66 | 67 | if len(tz.tzAbbrInfos[abbr]) > 1 { 68 | return tz.tzAbbrInfos[abbr], ErrAmbiguousTzAbbreviations 69 | } 70 | 71 | return tz.tzAbbrInfos[abbr], nil 72 | } 73 | 74 | // GetTzAbbreviationInfoByTZName returns the TzAbbreviationInfo with the given timezone abbreviation and timezone name. 75 | // Even if timezone abbreviation has more than one meanings, it can be identified by tzname. 76 | func (tz *Timezone) GetTzAbbreviationInfoByTZName(abbr, tzname string) (*TzAbbreviationInfo, error) { 77 | if _, ok := tz.tzAbbrInfos[abbr]; !ok { 78 | return nil, fmt.Errorf(errFormatInvalidTzAbbreviation, abbr) 79 | } 80 | 81 | for _, tzi := range tz.tzAbbrInfos[abbr] { 82 | names := strings.Split(tzi.Name(), "/") 83 | if len(names) == 1 && names[0] == tzname { 84 | return tzi, nil 85 | } 86 | 87 | if len(names) == 2 && (names[0] == tzname || names[1] == tzname) { 88 | return tzi, nil 89 | } 90 | } 91 | 92 | return nil, fmt.Errorf(errFormatInvalidTzName, abbr, tzname) 93 | } 94 | 95 | // GetTimezones returns the timezones with the given timezone abbreviation. 96 | func (tz *Timezone) GetTimezones(abbr string) ([]string, error) { 97 | if _, ok := tz.timezones[abbr]; !ok { 98 | return []string{}, fmt.Errorf(errFormatInvalidTzAbbreviation, abbr) 99 | } 100 | 101 | return tz.timezones[abbr], nil 102 | } 103 | 104 | // FixedTimezone returns the time.Time with the given timezone set from the time.Location. 105 | func (tz *Timezone) FixedTimezone(t time.Time, timezone string) (time.Time, error) { 106 | var err error 107 | var loc *time.Location 108 | zone, offset := time.Now().In(time.Local).Zone() 109 | 110 | if timezone != "" { 111 | loc, err = time.LoadLocation(timezone) 112 | if err != nil { 113 | return time.Time{}, err 114 | } 115 | 116 | return t.In(loc), err 117 | } 118 | 119 | loc = time.FixedZone(zone, offset) 120 | return t.In(loc), err 121 | } 122 | 123 | // GetTzInfo returns the TzInfo with the given timezone. 124 | func (tz *Timezone) GetTzInfo(timezone string) (*TzInfo, error) { 125 | tzInfo, ok := tz.tzInfos[timezone] 126 | if !ok { 127 | return nil, fmt.Errorf(errFormatInvalidTz, timezone) 128 | } 129 | 130 | return tzInfo, nil 131 | } 132 | 133 | // GetOffset returns the timezone offset with the given timezone abbreviation. 134 | // If also given dst=true, returns the daylight savings timezone offset. 135 | // Returns a ErrAmbiguousTzAbbreviations error if timezone abbreviation has more than one meaning. 136 | // 137 | // Deprecated: Use GetTzAbbreviationInfo or GetTzAbbreviationInfoByTZName 138 | func (tz *Timezone) GetOffset(abbr string, dst ...bool) (int, error) { 139 | tzAbbrInfos, ok := tz.tzAbbrInfos[abbr] 140 | if !ok { 141 | return 0, fmt.Errorf(errFormatInvalidTzAbbreviation, abbr) 142 | } 143 | 144 | if len(tz.tzAbbrInfos[abbr]) > 1 { 145 | return 0, ErrAmbiguousTzAbbreviations 146 | } 147 | 148 | if len(dst) == 0 || !dst[0] { 149 | return tzAbbrInfos[0].Offset(), nil 150 | } 151 | 152 | if dst[0] && !tzAbbrInfos[0].IsDST() { 153 | return 0, fmt.Errorf(errFormatDoesNotHaveDST, abbr) 154 | } 155 | 156 | return tzAbbrInfos[0].Offset(), nil 157 | } 158 | 159 | // GetTimezoneAbbreviation returns the timezone abbreviation with the given timezone. 160 | // If also given dst=true, returns the daylight savings timezone abbreviation. 161 | func (tz *Timezone) GetTimezoneAbbreviation(timezone string, dst ...bool) (string, error) { 162 | tzinfo, ok := tz.tzInfos[timezone] 163 | if !ok { 164 | return "", fmt.Errorf(errFormatInvalidTz, timezone) 165 | } 166 | 167 | if len(dst) == 0 || !dst[0] { 168 | return tzinfo.ShortStandard(), nil 169 | } 170 | 171 | if dst[0] && !tzinfo.HasDST() { 172 | return "", fmt.Errorf(errFormatDoesNotHaveDST, timezone) 173 | } 174 | 175 | return tzinfo.ShortDaylight(), nil 176 | } 177 | 178 | // IsDST returns whether a given time is daylight saving time or not. 179 | func (tz *Timezone) IsDST(t time.Time) bool { 180 | t1 := time.Date(t.Year(), time.January, 1, 0, 0, 0, 0, t.Location()) 181 | t2 := time.Date(t.Year(), time.July, 1, 0, 0, 0, 0, t.Location()) 182 | 183 | _, tOffset := t.Zone() 184 | _, t1Offset := t1.Zone() 185 | _, t2Offset := t2.Zone() 186 | 187 | var dstOffset int 188 | if t1Offset > t2Offset { 189 | dstOffset = t1Offset 190 | } else if t1Offset < t2Offset { 191 | dstOffset = t2Offset 192 | } else { 193 | return false 194 | } 195 | 196 | if dstOffset == tOffset { 197 | return true 198 | } 199 | 200 | return false 201 | } 202 | -------------------------------------------------------------------------------- /timezone_test.go: -------------------------------------------------------------------------------- 1 | package timezone 2 | 3 | import ( 4 | "reflect" 5 | "testing" 6 | "time" 7 | ) 8 | 9 | func TestGetTzAbbreviationInfo(t *testing.T) { 10 | t.Parallel() 11 | 12 | tz := New() 13 | 14 | abbr := "EET" 15 | want := 7200 16 | t.Run("EET is offset 7200", func(t *testing.T) { 17 | tzAbbrInfo, err := tz.GetTzAbbreviationInfo(abbr) 18 | if err != nil { 19 | t.Fatal(err) 20 | } 21 | 22 | got := tzAbbrInfo[0].Offset() 23 | if got != want { 24 | t.Fatalf(`want: %v, got: %v`, want, got) 25 | } 26 | }) 27 | 28 | t.Run("BST are ambiguous abbreviations", func(t *testing.T) { 29 | ambiguousAbbr := "BST" 30 | _, err := tz.GetTzAbbreviationInfo(ambiguousAbbr) 31 | if err != ErrAmbiguousTzAbbreviations { 32 | t.Fatal(err) 33 | } 34 | }) 35 | } 36 | 37 | func TestGetTzAbbreviationInfoByTZName(t *testing.T) { 38 | t.Parallel() 39 | 40 | tz := New() 41 | 42 | abbr := "BST" 43 | t.Run("BST / British Summer Time is offset 3600", func(t *testing.T) { 44 | name := "British Summer Time" 45 | offset := 3600 46 | 47 | tzAbbrInfo, err := tz.GetTzAbbreviationInfoByTZName(abbr, name) 48 | if err != nil { 49 | t.Fatal(err) 50 | } 51 | 52 | if tzAbbrInfo.Offset() != offset { 53 | t.Fatalf(`want: %d, got: %d`, offset, tzAbbrInfo.Offset()) 54 | } 55 | }) 56 | 57 | t.Run("Invalid Time", func(t *testing.T) { 58 | name := "Invalid Time" 59 | tzAbbrInfo, _ := tz.GetTzAbbreviationInfoByTZName(abbr, name) 60 | if tzAbbrInfo != nil { 61 | t.Fatalf(`want: "%T", got: "%T"`, nil, tzAbbrInfo) 62 | } 63 | }) 64 | } 65 | 66 | func TestGetTimezones(t *testing.T) { 67 | t.Parallel() 68 | 69 | tz := New() 70 | 71 | t.Run("UTC", func(t *testing.T) { 72 | abbr := "UTC" 73 | want := []string{ 74 | "Etc/UCT", 75 | "Etc/UTC", 76 | "Etc/Universal", 77 | "Etc/Zulu", 78 | "UCT", 79 | "UTC", 80 | "Universal", 81 | "Zulu", 82 | } 83 | 84 | timezones, err := tz.GetTimezones(abbr) 85 | if err != nil { 86 | t.Fatal(err) 87 | } 88 | 89 | if !reflect.DeepEqual(want, timezones) { 90 | t.Fatalf(`want: %v, got: %v`, want, timezones) 91 | } 92 | }) 93 | 94 | t.Run("Invalid/Zone", func(t *testing.T) { 95 | abbr := "Invalid" 96 | _, err := tz.GetTimezones(abbr) 97 | if err == nil { 98 | t.Fatal("Invalid timezone") 99 | } 100 | }) 101 | } 102 | 103 | func TestFixedTimezone(t *testing.T) { 104 | t.Parallel() 105 | 106 | tz := New() 107 | 108 | baseTime := time.Date(2020, 1, 1, 0, 0, 0, 0, time.Local) 109 | t.Run("Europe/Belgrade", func(t *testing.T) { 110 | timezone := "Europe/Belgrade" 111 | want := 3600 112 | 113 | _time, err := tz.FixedTimezone(baseTime, timezone) 114 | if err != nil { 115 | t.Fatal(err) 116 | } 117 | 118 | _, offset := _time.Zone() 119 | if want != offset { 120 | t.Fatalf(`want: %d, got: %d`, want, offset) 121 | } 122 | }) 123 | 124 | t.Run("Invalid/Zone", func(t *testing.T) { 125 | timezone := "Invalid/Zone" 126 | _time, _ := tz.FixedTimezone(baseTime, timezone) 127 | if !_time.IsZero() { 128 | t.Fatal("Invalid timezone") 129 | } 130 | }) 131 | } 132 | 133 | func TestGetTzInfo(t *testing.T) { 134 | t.Parallel() 135 | 136 | tz := New() 137 | 138 | t.Run("Europe/London", func(t *testing.T) { 139 | timezone := "Europe/London" 140 | want := "GMT" 141 | tzInfo, err := tz.GetTzInfo(timezone) 142 | if err != nil { 143 | t.Fatal(err) 144 | } 145 | 146 | abbr := tzInfo.ShortStandard() 147 | if abbr != want { 148 | t.Fatalf(`want: %s, got: %s`, want, abbr) 149 | } 150 | 151 | want = "BST" 152 | abbr = tzInfo.ShortDaylight() 153 | if abbr != want { 154 | t.Fatalf(`want: %s, got: %s`, want, abbr) 155 | } 156 | 157 | if !tzInfo.HasDST() { 158 | t.Fatalf(`want: true, got: %v`, tzInfo.HasDST()) 159 | } 160 | }) 161 | 162 | t.Run("Invalid/Zone", func(t *testing.T) { 163 | timezone := "Invalid/Zone" 164 | tzInfo, _ := tz.GetTzInfo(timezone) 165 | if tzInfo != nil { 166 | t.Fatal("Invalid timezone") 167 | } 168 | }) 169 | } 170 | 171 | func TestGetOffset(t *testing.T) { 172 | t.Parallel() 173 | 174 | tz := New() 175 | 176 | t.Run("GMT offset is 0", func(t *testing.T) { 177 | abbr := "GMT" 178 | want := 0 179 | offset, err := tz.GetOffset(abbr) 180 | if err != nil { 181 | t.Fatal(err) 182 | } 183 | 184 | if offset != want { 185 | t.Fatalf(`want: %d, got: %d`, want, offset) 186 | } 187 | }) 188 | 189 | t.Run("BST are ambiguous abbreviations", func(t *testing.T) { 190 | abbr := "BST" 191 | _, err := tz.GetOffset(abbr, true) 192 | if err != ErrAmbiguousTzAbbreviations { 193 | t.Fatal(err) 194 | } 195 | }) 196 | 197 | t.Run("Invalid abbreviation", func(t *testing.T) { 198 | abbr := "Invalid" 199 | offset, _ := tz.GetOffset(abbr) 200 | if offset != 0 { 201 | t.Fatal("Invalid timezone abbreviation") 202 | } 203 | }) 204 | 205 | } 206 | 207 | func TestGetTimezoneAbbreviation(t *testing.T) { 208 | t.Parallel() 209 | 210 | tz := New() 211 | 212 | cases := map[string]struct { 213 | want string 214 | dst bool 215 | timezone string 216 | skipErr bool 217 | }{ 218 | "Europe/London is GMT": { 219 | want: "GMT", 220 | dst: false, 221 | timezone: "Europe/London", 222 | skipErr: false, 223 | }, 224 | "Europe/London is BST when DST": { 225 | want: "BST", 226 | dst: true, 227 | timezone: "Europe/London", 228 | skipErr: false, 229 | }, 230 | "Invalid/Zone is empty": { 231 | want: "", 232 | timezone: "Invalid/Zone", 233 | skipErr: true, 234 | }, 235 | } 236 | 237 | for name, tc := range cases { 238 | tc := tc 239 | t.Run(name, func(t *testing.T) { 240 | abbr, err := tz.GetTimezoneAbbreviation(tc.timezone, tc.dst) 241 | if !tc.skipErr && err != nil { 242 | t.Fatal(err) 243 | } 244 | 245 | if abbr != tc.want { 246 | t.Fatalf(`want: %s, got: %s`, tc.want, abbr) 247 | } 248 | }) 249 | } 250 | } 251 | 252 | func TestIsDST(t *testing.T) { 253 | t.Parallel() 254 | 255 | tz := New() 256 | 257 | locNY, err := time.LoadLocation("America/New_York") 258 | if err != nil { 259 | t.Fatal(err) 260 | } 261 | 262 | locUTC, err := time.LoadLocation("UTC") 263 | if err != nil { 264 | t.Fatal(err) 265 | } 266 | 267 | cases := map[string]struct { 268 | want bool 269 | loc *time.Location 270 | t time.Time 271 | }{ 272 | "America/New_York is not DST on 2021-01-01 at 0:00": { 273 | want: false, 274 | loc: locNY, 275 | t: time.Date(2021, 1, 1, 1, 0, 0, 0, locNY), 276 | }, 277 | "America/New_York is DST on 2021-07-01 at 0:00": { 278 | want: true, 279 | loc: locNY, 280 | t: time.Date(2021, 7, 1, 1, 0, 0, 0, locNY), 281 | }, 282 | "UTC is not DST on 2021-01-01 at 0:00": { 283 | want: false, 284 | loc: locUTC, 285 | t: time.Date(2021, 1, 1, 1, 0, 0, 0, locUTC), 286 | }, 287 | "UTC is not DST on 2021-07-01 at 0:00": { 288 | want: false, 289 | loc: locUTC, 290 | t: time.Date(2021, 7, 1, 1, 0, 0, 0, locUTC), 291 | }, 292 | } 293 | 294 | for name, tc := range cases { 295 | tc := tc 296 | t.Run(name, func(t *testing.T) { 297 | isDST := tz.IsDST(tc.t) 298 | if tc.want != isDST { 299 | t.Fatalf(`want: %v, got: %v`, tc.want, isDST) 300 | } 301 | }) 302 | } 303 | } 304 | -------------------------------------------------------------------------------- /timezones.go: -------------------------------------------------------------------------------- 1 | package timezone 2 | 3 | var timezones = map[string][]string{ 4 | "GMT": []string{ 5 | "Africa/Abidjan", 6 | "Africa/Accra", 7 | "Africa/Bamako", 8 | "Africa/Banjul", 9 | "Africa/Bissau", 10 | "Africa/Conakry", 11 | "Africa/Dakar", 12 | "Africa/Freetown", 13 | "Africa/Lome", 14 | "Africa/Monrovia", 15 | "Africa/Nouakchott", 16 | "Africa/Ouagadougou", 17 | "Africa/Sao_Tome", 18 | "Africa/Timbuktu", 19 | "America/Danmarkshavn", 20 | "Antarctica/Troll", 21 | "Atlantic/Reykjavik", 22 | "Atlantic/St_Helena", 23 | "Eire", 24 | "Etc/GMT", 25 | "Etc/GMT+0", 26 | "Etc/GMT-0", 27 | "Etc/GMT0", 28 | "Etc/Greenwich", 29 | "Europe/Belfast", 30 | "Europe/Dublin", 31 | "Europe/Guernsey", 32 | "Europe/Isle_of_Man", 33 | "Europe/Jersey", 34 | "Europe/London", 35 | "GB", 36 | "GB-Eire", 37 | "GMT", 38 | "GMT+0", 39 | "GMT-0", 40 | "GMT0", 41 | "Greenwich", 42 | "Iceland", 43 | }, 44 | "GHST": []string{ 45 | "Africa/Accra", 46 | }, 47 | "EAT": []string{ 48 | "Africa/Addis_Ababa", 49 | "Africa/Asmara", 50 | "Africa/Asmera", 51 | "Africa/Dar_es_Salaam", 52 | "Africa/Djibouti", 53 | "Africa/Juba", 54 | "Africa/Kampala", 55 | "Africa/Mogadishu", 56 | "Africa/Nairobi", 57 | "Indian/Antananarivo", 58 | "Indian/Comoro", 59 | "Indian/Mayotte", 60 | }, 61 | "CET": []string{ 62 | "Africa/Algiers", 63 | "Africa/Ceuta", 64 | "Africa/Tunis", 65 | "Arctic/Longyearbyen", 66 | "Atlantic/Jan_Mayen", 67 | "CET", 68 | "Europe/Amsterdam", 69 | "Europe/Andorra", 70 | "Europe/Belgrade", 71 | "Europe/Berlin", 72 | "Europe/Bratislava", 73 | "Europe/Brussels", 74 | "Europe/Budapest", 75 | "Europe/Busingen", 76 | "Europe/Copenhagen", 77 | "Europe/Gibraltar", 78 | "Europe/Ljubljana", 79 | "Europe/Luxembourg", 80 | "Europe/Madrid", 81 | "Europe/Malta", 82 | "Europe/Monaco", 83 | "Europe/Oslo", 84 | "Europe/Paris", 85 | "Europe/Podgorica", 86 | "Europe/Prague", 87 | "Europe/Rome", 88 | "Europe/San_Marino", 89 | "Europe/Sarajevo", 90 | "Europe/Skopje", 91 | "Europe/Stockholm", 92 | "Europe/Tirane", 93 | "Europe/Vaduz", 94 | "Europe/Vatican", 95 | "Europe/Vienna", 96 | "Europe/Warsaw", 97 | "Europe/Zagreb", 98 | "Europe/Zurich", 99 | "Poland", 100 | }, 101 | "WAT": []string{ 102 | "Africa/Bangui", 103 | "Africa/Brazzaville", 104 | "Africa/Douala", 105 | "Africa/Kinshasa", 106 | "Africa/Lagos", 107 | "Africa/Libreville", 108 | "Africa/Luanda", 109 | "Africa/Malabo", 110 | "Africa/Ndjamena", 111 | "Africa/Niamey", 112 | "Africa/Porto-Novo", 113 | }, 114 | "CAT": []string{ 115 | "Africa/Blantyre", 116 | "Africa/Bujumbura", 117 | "Africa/Gaborone", 118 | "Africa/Harare", 119 | "Africa/Khartoum", 120 | "Africa/Kigali", 121 | "Africa/Lubumbashi", 122 | "Africa/Lusaka", 123 | "Africa/Maputo", 124 | "Africa/Windhoek", 125 | }, 126 | "EET": []string{ 127 | "Africa/Cairo", 128 | "Africa/Tripoli", 129 | "Asia/Amman", 130 | "Asia/Beirut", 131 | "Asia/Damascus", 132 | "Asia/Famagusta", 133 | "Asia/Gaza", 134 | "Asia/Hebron", 135 | "Asia/Nicosia", 136 | "EET", 137 | "Egypt", 138 | "Europe/Athens", 139 | "Europe/Bucharest", 140 | "Europe/Chisinau", 141 | "Europe/Helsinki", 142 | "Europe/Kaliningrad", 143 | "Europe/Kiev", 144 | "Europe/Kyiv", 145 | "Europe/Mariehamn", 146 | "Europe/Nicosia", 147 | "Europe/Riga", 148 | "Europe/Sofia", 149 | "Europe/Tallinn", 150 | "Europe/Tiraspol", 151 | "Europe/Uzhgorod", 152 | "Europe/Uzhhorod", 153 | "Europe/Vilnius", 154 | "Europe/Zaporozhye", 155 | "Europe/Zaporizhzhia", 156 | "Libya", 157 | }, 158 | "EEST": []string{ 159 | "Africa/Cairo", 160 | "Asia/Amman", 161 | "Asia/Beirut", 162 | "Asia/Damascus", 163 | "Asia/Famagusta", 164 | "Asia/Gaza", 165 | "Asia/Hebron", 166 | "Asia/Nicosia", 167 | "EET", 168 | "Egypt", 169 | "Europe/Athens", 170 | "Europe/Bucharest", 171 | "Europe/Chisinau", 172 | "Europe/Helsinki", 173 | "Europe/Kaliningrad", 174 | "Europe/Kiev", 175 | "Europe/Kyiv", 176 | "Europe/Mariehamn", 177 | "Europe/Nicosia", 178 | "Europe/Riga", 179 | "Europe/Sofia", 180 | "Europe/Tallinn", 181 | "Europe/Tiraspol", 182 | "Europe/Uzhgorod", 183 | "Europe/Uzhhorod", 184 | "Europe/Vilnius", 185 | "Europe/Zaporozhye", 186 | "Europe/Zaporizhzhia", 187 | }, 188 | "WET": []string{ 189 | "Africa/Casablanca", 190 | "Africa/El_Aaiun", 191 | "Atlantic/Canary", 192 | "Atlantic/Faeroe", 193 | "Atlantic/Faroe", 194 | "Atlantic/Madeira", 195 | "Europe/Lisbon", 196 | "Portugal", 197 | "WET", 198 | }, 199 | "WEST": []string{ 200 | "Africa/Casablanca", 201 | "Africa/El_Aaiun", 202 | "Atlantic/Canary", 203 | "Atlantic/Faeroe", 204 | "Atlantic/Faroe", 205 | "Atlantic/Madeira", 206 | "Europe/Lisbon", 207 | "Portugal", 208 | "WET", 209 | }, 210 | "CEST": []string{ 211 | "Africa/Ceuta", 212 | "Africa/Tunis", 213 | "Antarctica/Troll", 214 | "Arctic/Longyearbyen", 215 | "Atlantic/Jan_Mayen", 216 | "CET", 217 | "Europe/Amsterdam", 218 | "Europe/Andorra", 219 | "Europe/Belgrade", 220 | "Europe/Berlin", 221 | "Europe/Bratislava", 222 | "Europe/Brussels", 223 | "Europe/Budapest", 224 | "Europe/Busingen", 225 | "Europe/Copenhagen", 226 | "Europe/Gibraltar", 227 | "Europe/Ljubljana", 228 | "Europe/Luxembourg", 229 | "Europe/Madrid", 230 | "Europe/Malta", 231 | "Europe/Monaco", 232 | "Europe/Oslo", 233 | "Europe/Paris", 234 | "Europe/Podgorica", 235 | "Europe/Prague", 236 | "Europe/Rome", 237 | "Europe/San_Marino", 238 | "Europe/Sarajevo", 239 | "Europe/Skopje", 240 | "Europe/Stockholm", 241 | "Europe/Tirane", 242 | "Europe/Vaduz", 243 | "Europe/Vatican", 244 | "Europe/Vienna", 245 | "Europe/Warsaw", 246 | "Europe/Zagreb", 247 | "Europe/Zurich", 248 | "Poland", 249 | }, 250 | "SAST": []string{ 251 | "Africa/Johannesburg", 252 | "Africa/Maseru", 253 | "Africa/Mbabane", 254 | }, 255 | "CAST": []string{ 256 | "Africa/Khartoum", 257 | }, 258 | "HAT": []string{ 259 | "America/Adak", 260 | "America/Atka", 261 | "HST", 262 | "Pacific/Honolulu", 263 | "Pacific/Johnston", 264 | "US/Aleutian", 265 | "US/Hawaii", 266 | }, 267 | "HAST": []string{ 268 | "America/Adak", 269 | "America/Atka", 270 | "HST", 271 | "Pacific/Honolulu", 272 | "Pacific/Johnston", 273 | "US/Aleutian", 274 | "US/Hawaii", 275 | }, 276 | "HADT": []string{ 277 | "America/Adak", 278 | "America/Atka", 279 | "Pacific/Honolulu", 280 | "Pacific/Johnston", 281 | "US/Aleutian", 282 | "US/Hawaii", 283 | }, 284 | "AKT": []string{ 285 | "America/Anchorage", 286 | "America/Juneau", 287 | "America/Metlakatla", 288 | "America/Nome", 289 | "America/Sitka", 290 | "America/Yakutat", 291 | "US/Alaska", 292 | }, 293 | "AKST": []string{ 294 | "America/Anchorage", 295 | "America/Juneau", 296 | "America/Metlakatla", 297 | "America/Nome", 298 | "America/Sitka", 299 | "America/Yakutat", 300 | "US/Alaska", 301 | }, 302 | "AKDT": []string{ 303 | "America/Anchorage", 304 | "America/Juneau", 305 | "America/Metlakatla", 306 | "America/Nome", 307 | "America/Sitka", 308 | "America/Yakutat", 309 | "US/Alaska", 310 | }, 311 | "AT": []string{ 312 | "America/Anguilla", 313 | "America/Antigua", 314 | "America/Aruba", 315 | "America/Barbados", 316 | "America/Blanc-Sablon", 317 | "America/Curacao", 318 | "America/Dominica", 319 | "America/Glace_Bay", 320 | "America/Goose_Bay", 321 | "America/Grenada", 322 | "America/Guadeloupe", 323 | "America/Halifax", 324 | "America/Kralendijk", 325 | "America/Lower_Princes", 326 | "America/Marigot", 327 | "America/Martinique", 328 | "America/Moncton", 329 | "America/Montserrat", 330 | "America/Port_of_Spain", 331 | "America/Puerto_Rico", 332 | "America/Santo_Domingo", 333 | "America/St_Barthelemy", 334 | "America/St_Kitts", 335 | "America/St_Lucia", 336 | "America/St_Thomas", 337 | "America/St_Vincent", 338 | "America/Thule", 339 | "America/Tortola", 340 | "America/Virgin", 341 | "Atlantic/Bermuda", 342 | "Canada/Atlantic", 343 | }, 344 | "AST": []string{ 345 | "America/Anguilla", 346 | "America/Antigua", 347 | "America/Aruba", 348 | "America/Barbados", 349 | "America/Blanc-Sablon", 350 | "America/Curacao", 351 | "America/Dominica", 352 | "America/Glace_Bay", 353 | "America/Goose_Bay", 354 | "America/Grenada", 355 | "America/Guadeloupe", 356 | "America/Halifax", 357 | "America/Kralendijk", 358 | "America/Lower_Princes", 359 | "America/Marigot", 360 | "America/Martinique", 361 | "America/Moncton", 362 | "America/Montserrat", 363 | "America/Port_of_Spain", 364 | "America/Puerto_Rico", 365 | "America/Santo_Domingo", 366 | "America/St_Barthelemy", 367 | "America/St_Kitts", 368 | "America/St_Lucia", 369 | "America/St_Thomas", 370 | "America/St_Vincent", 371 | "America/Thule", 372 | "America/Tortola", 373 | "America/Virgin", 374 | "Asia/Aden", 375 | "Asia/Baghdad", 376 | "Asia/Bahrain", 377 | "Asia/Kuwait", 378 | "Asia/Qatar", 379 | "Asia/Riyadh", 380 | "Atlantic/Bermuda", 381 | "Canada/Atlantic", 382 | }, 383 | "BRT": []string{ 384 | "America/Araguaina", 385 | "America/Bahia", 386 | "America/Belem", 387 | "America/Fortaleza", 388 | "America/Maceio", 389 | "America/Recife", 390 | "America/Santarem", 391 | "America/Sao_Paulo", 392 | "Brazil/East", 393 | }, 394 | "BRST": []string{ 395 | "America/Araguaina", 396 | "America/Bahia", 397 | "America/Belem", 398 | "America/Fortaleza", 399 | "America/Maceio", 400 | "America/Recife", 401 | "America/Sao_Paulo", 402 | "Brazil/East", 403 | }, 404 | "ART": []string{ 405 | "America/Argentina/Buenos_Aires", 406 | "America/Argentina/Catamarca", 407 | "America/Argentina/ComodRivadavia", 408 | "America/Argentina/Cordoba", 409 | "America/Argentina/Jujuy", 410 | "America/Argentina/La_Rioja", 411 | "America/Argentina/Mendoza", 412 | "America/Argentina/Rio_Gallegos", 413 | "America/Argentina/Salta", 414 | "America/Argentina/San_Juan", 415 | "America/Argentina/San_Luis", 416 | "America/Argentina/Tucuman", 417 | "America/Argentina/Ushuaia", 418 | "America/Buenos_Aires", 419 | "America/Catamarca", 420 | "America/Cordoba", 421 | "America/Jujuy", 422 | "America/Mendoza", 423 | "America/Rosario", 424 | }, 425 | "ARST": []string{ 426 | "America/Argentina/Buenos_Aires", 427 | "America/Argentina/Catamarca", 428 | "America/Argentina/ComodRivadavia", 429 | "America/Argentina/Cordoba", 430 | "America/Argentina/Jujuy", 431 | "America/Argentina/La_Rioja", 432 | "America/Argentina/Mendoza", 433 | "America/Argentina/Rio_Gallegos", 434 | "America/Argentina/Salta", 435 | "America/Argentina/San_Juan", 436 | "America/Argentina/Tucuman", 437 | "America/Argentina/Ushuaia", 438 | "America/Buenos_Aires", 439 | "America/Catamarca", 440 | "America/Cordoba", 441 | "America/Jujuy", 442 | "America/Mendoza", 443 | "America/Rosario", 444 | }, 445 | "PYT": []string{ 446 | "America/Asuncion", 447 | }, 448 | "PYST": []string{ 449 | "America/Asuncion", 450 | }, 451 | "ET": []string{ 452 | "America/Atikokan", 453 | "America/Cancun", 454 | "America/Cayman", 455 | "America/Coral_Harbour", 456 | "America/Detroit", 457 | "America/Fort_Wayne", 458 | "America/Grand_Turk", 459 | "America/Indiana/Indianapolis", 460 | "America/Indiana/Marengo", 461 | "America/Indiana/Petersburg", 462 | "America/Indiana/Vevay", 463 | "America/Indiana/Vincennes", 464 | "America/Indiana/Winamac", 465 | "America/Indianapolis", 466 | "America/Iqaluit", 467 | "America/Jamaica", 468 | "America/Kentucky/Louisville", 469 | "America/Kentucky/Monticello", 470 | "America/Louisville", 471 | "America/Montreal", 472 | "America/Nassau", 473 | "America/New_York", 474 | "America/Nipigon", 475 | "America/Panama", 476 | "America/Pangnirtung", 477 | "America/Port-au-Prince", 478 | "America/Thunder_Bay", 479 | "America/Toronto", 480 | "Canada/Eastern", 481 | "EST", 482 | "EST5EDT", 483 | "Jamaica", 484 | "US/East-Indiana", 485 | "US/Eastern", 486 | "US/Michigan", 487 | }, 488 | "EST": []string{ 489 | "America/Atikokan", 490 | "America/Cancun", 491 | "America/Cayman", 492 | "America/Coral_Harbour", 493 | "America/Detroit", 494 | "America/Fort_Wayne", 495 | "America/Grand_Turk", 496 | "America/Indiana/Indianapolis", 497 | "America/Indiana/Marengo", 498 | "America/Indiana/Petersburg", 499 | "America/Indiana/Vevay", 500 | "America/Indiana/Vincennes", 501 | "America/Indiana/Winamac", 502 | "America/Indianapolis", 503 | "America/Iqaluit", 504 | "America/Jamaica", 505 | "America/Kentucky/Louisville", 506 | "America/Kentucky/Monticello", 507 | "America/Louisville", 508 | "America/Montreal", 509 | "America/Nassau", 510 | "America/New_York", 511 | "America/Nipigon", 512 | "America/Panama", 513 | "America/Pangnirtung", 514 | "America/Port-au-Prince", 515 | "America/Thunder_Bay", 516 | "America/Toronto", 517 | "Canada/Eastern", 518 | "EST", 519 | "EST5EDT", 520 | "Jamaica", 521 | "US/East-Indiana", 522 | "US/Eastern", 523 | "US/Michigan", 524 | }, 525 | "CT": []string{ 526 | "America/Bahia_Banderas", 527 | "America/Belize", 528 | "America/Chicago", 529 | "America/Costa_Rica", 530 | "America/El_Salvador", 531 | "America/Guatemala", 532 | "America/Havana", 533 | "America/Indiana/Knox", 534 | "America/Indiana/Tell_City", 535 | "America/Knox_IN", 536 | "America/Managua", 537 | "America/Matamoros", 538 | "America/Menominee", 539 | "America/Merida", 540 | "America/Mexico_City", 541 | "America/Monterrey", 542 | "America/North_Dakota/Beulah", 543 | "America/North_Dakota/Center", 544 | "America/North_Dakota/New_Salem", 545 | "America/Rainy_River", 546 | "America/Rankin_Inlet", 547 | "America/Regina", 548 | "America/Resolute", 549 | "America/Swift_Current", 550 | "America/Tegucigalpa", 551 | "America/Winnipeg", 552 | "Asia/Chongqing", 553 | "Asia/Chungking", 554 | "Asia/Harbin", 555 | "Asia/Kashgar", 556 | "Asia/Macao", 557 | "Asia/Macau", 558 | "Asia/Shanghai", 559 | "Asia/Taipei", 560 | "CST6CDT", 561 | "Canada/Central", 562 | "Canada/Saskatchewan", 563 | "Cuba", 564 | "Mexico/General", 565 | "PRC", 566 | "ROC", 567 | "US/Central", 568 | "US/Indiana-Starke", 569 | }, 570 | "CST": []string{ 571 | "America/Bahia_Banderas", 572 | "America/Belize", 573 | "America/Chicago", 574 | "America/Costa_Rica", 575 | "America/El_Salvador", 576 | "America/Guatemala", 577 | "America/Havana", 578 | "America/Indiana/Knox", 579 | "America/Indiana/Tell_City", 580 | "America/Knox_IN", 581 | "America/Managua", 582 | "America/Matamoros", 583 | "America/Menominee", 584 | "America/Merida", 585 | "America/Mexico_City", 586 | "America/Monterrey", 587 | "America/North_Dakota/Beulah", 588 | "America/North_Dakota/Center", 589 | "America/North_Dakota/New_Salem", 590 | "America/Rainy_River", 591 | "America/Rankin_Inlet", 592 | "America/Regina", 593 | "America/Resolute", 594 | "America/Swift_Current", 595 | "America/Tegucigalpa", 596 | "America/Winnipeg", 597 | "Asia/Chongqing", 598 | "Asia/Chungking", 599 | "Asia/Harbin", 600 | "Asia/Kashgar", 601 | "Asia/Macao", 602 | "Asia/Macau", 603 | "Asia/Shanghai", 604 | "Asia/Taipei", 605 | "Asia/Urumqi", 606 | "CST6CDT", 607 | "Canada/Central", 608 | "Canada/Saskatchewan", 609 | "Cuba", 610 | "Mexico/General", 611 | "PRC", 612 | "ROC", 613 | "US/Central", 614 | "US/Indiana-Starke", 615 | }, 616 | "CDT": []string{ 617 | "America/Bahia_Banderas", 618 | "America/Belize", 619 | "America/Chicago", 620 | "America/Costa_Rica", 621 | "America/El_Salvador", 622 | "America/Guatemala", 623 | "America/Havana", 624 | "America/Indiana/Knox", 625 | "America/Indiana/Tell_City", 626 | "America/Knox_IN", 627 | "America/Managua", 628 | "America/Matamoros", 629 | "America/Menominee", 630 | "America/Merida", 631 | "America/Mexico_City", 632 | "America/Monterrey", 633 | "America/North_Dakota/Beulah", 634 | "America/North_Dakota/Center", 635 | "America/North_Dakota/New_Salem", 636 | "America/Rainy_River", 637 | "America/Rankin_Inlet", 638 | "America/Resolute", 639 | "America/Tegucigalpa", 640 | "America/Winnipeg", 641 | "Asia/Chongqing", 642 | "Asia/Chungking", 643 | "Asia/Macao", 644 | "Asia/Macau", 645 | "Asia/Shanghai", 646 | "Asia/Taipei", 647 | "CST6CDT", 648 | "Canada/Central", 649 | "Cuba", 650 | "Mexico/General", 651 | "PRC", 652 | "ROC", 653 | "US/Central", 654 | "US/Indiana-Starke", 655 | }, 656 | "ADT": []string{ 657 | "America/Barbados", 658 | "America/Blanc-Sablon", 659 | "America/Glace_Bay", 660 | "America/Goose_Bay", 661 | "America/Halifax", 662 | "America/Martinique", 663 | "America/Moncton", 664 | "America/Puerto_Rico", 665 | "America/Thule", 666 | "Asia/Baghdad", 667 | "Atlantic/Bermuda", 668 | "Canada/Atlantic", 669 | }, 670 | "AMT": []string{ 671 | "America/Boa_Vista", 672 | "America/Campo_Grande", 673 | "America/Cuiaba", 674 | "America/Manaus", 675 | "America/Porto_Velho", 676 | "Asia/Yerevan", 677 | "Brazil/West", 678 | }, 679 | "AMST": []string{ 680 | "America/Boa_Vista", 681 | "America/Campo_Grande", 682 | "America/Cuiaba", 683 | "America/Manaus", 684 | "America/Porto_Velho", 685 | "Asia/Yerevan", 686 | "Brazil/West", 687 | }, 688 | "COT": []string{ 689 | "America/Bogota", 690 | }, 691 | "COST": []string{ 692 | "America/Bogota", 693 | }, 694 | "MT": []string{ 695 | "America/Boise", 696 | "America/Cambridge_Bay", 697 | "America/Chihuahua", 698 | "America/Creston", 699 | "America/Dawson_Creek", 700 | "America/Denver", 701 | "America/Edmonton", 702 | "America/Fort_Nelson", 703 | "America/Hermosillo", 704 | "America/Inuvik", 705 | "America/Mazatlan", 706 | "America/Ojinaga", 707 | "America/Phoenix", 708 | "America/Shiprock", 709 | "America/Whitehorse", 710 | "America/Yellowknife", 711 | "Canada/Mountain", 712 | "Canada/Yukon", 713 | "MST", 714 | "MST7MDT", 715 | "Mexico/BajaSur", 716 | "Navajo", 717 | "US/Arizona", 718 | "US/Mountain", 719 | }, 720 | "MST": []string{ 721 | "America/Boise", 722 | "America/Cambridge_Bay", 723 | "America/Chihuahua", 724 | "America/Creston", 725 | "America/Dawson_Creek", 726 | "America/Denver", 727 | "America/Edmonton", 728 | "America/Fort_Nelson", 729 | "America/Hermosillo", 730 | "America/Inuvik", 731 | "America/Mazatlan", 732 | "America/Ojinaga", 733 | "America/Phoenix", 734 | "America/Shiprock", 735 | "America/Whitehorse", 736 | "America/Yellowknife", 737 | "Canada/Mountain", 738 | "Canada/Yukon", 739 | "MST", 740 | "MST7MDT", 741 | "Mexico/BajaSur", 742 | "Navajo", 743 | "US/Arizona", 744 | "US/Mountain", 745 | }, 746 | "MDT": []string{ 747 | "America/Boise", 748 | "America/Cambridge_Bay", 749 | "America/Chihuahua", 750 | "America/Denver", 751 | "America/Edmonton", 752 | "America/Hermosillo", 753 | "America/Inuvik", 754 | "America/Mazatlan", 755 | "America/Ojinaga", 756 | "America/Phoenix", 757 | "America/Shiprock", 758 | "America/Yellowknife", 759 | "Canada/Mountain", 760 | "MST7MDT", 761 | "Mexico/BajaSur", 762 | "Navajo", 763 | "US/Arizona", 764 | "US/Mountain", 765 | }, 766 | "VET": []string{ 767 | "America/Caracas", 768 | }, 769 | "GFT": []string{ 770 | "America/Cayenne", 771 | }, 772 | "PT": []string{ 773 | "America/Dawson", 774 | "America/Ensenada", 775 | "America/Los_Angeles", 776 | "America/Santa_Isabel", 777 | "America/Tijuana", 778 | "America/Vancouver", 779 | "Canada/Pacific", 780 | "Mexico/BajaNorte", 781 | "PST8PDT", 782 | "US/Pacific", 783 | }, 784 | "PST": []string{ 785 | "America/Dawson", 786 | "America/Ensenada", 787 | "America/Los_Angeles", 788 | "America/Santa_Isabel", 789 | "America/Tijuana", 790 | "America/Vancouver", 791 | "Canada/Pacific", 792 | "Mexico/BajaNorte", 793 | "PST8PDT", 794 | "Pacific/Pitcairn", 795 | "US/Pacific", 796 | }, 797 | "EDT": []string{ 798 | "America/Detroit", 799 | "America/Fort_Wayne", 800 | "America/Grand_Turk", 801 | "America/Guayaquil", 802 | "America/Indiana/Indianapolis", 803 | "America/Indiana/Marengo", 804 | "America/Indiana/Petersburg", 805 | "America/Indiana/Vevay", 806 | "America/Indiana/Vincennes", 807 | "America/Indiana/Winamac", 808 | "America/Indianapolis", 809 | "America/Iqaluit", 810 | "America/Jamaica", 811 | "America/Kentucky/Louisville", 812 | "America/Kentucky/Monticello", 813 | "America/Louisville", 814 | "America/Montreal", 815 | "America/Nassau", 816 | "America/New_York", 817 | "America/Nipigon", 818 | "America/Pangnirtung", 819 | "America/Port-au-Prince", 820 | "America/Thunder_Bay", 821 | "America/Toronto", 822 | "Canada/Eastern", 823 | "EST5EDT", 824 | "Jamaica", 825 | "US/East-Indiana", 826 | "US/Eastern", 827 | "US/Michigan", 828 | }, 829 | "ACT": []string{ 830 | "America/Eirunepe", 831 | "America/Porto_Acre", 832 | "America/Rio_Branco", 833 | "Australia/Adelaide", 834 | "Australia/Broken_Hill", 835 | "Australia/Darwin", 836 | "Australia/North", 837 | "Australia/South", 838 | "Australia/Yancowinna", 839 | "Brazil/Acre", 840 | }, 841 | "ACST": []string{ 842 | "America/Eirunepe", 843 | "America/Porto_Acre", 844 | "America/Rio_Branco", 845 | "Australia/Adelaide", 846 | "Australia/Broken_Hill", 847 | "Australia/Darwin", 848 | "Australia/North", 849 | "Australia/South", 850 | "Australia/Yancowinna", 851 | "Brazil/Acre", 852 | }, 853 | "PDT": []string{ 854 | "America/Ensenada", 855 | "America/Los_Angeles", 856 | "America/Santa_Isabel", 857 | "America/Tijuana", 858 | "America/Vancouver", 859 | "Canada/Pacific", 860 | "Mexico/BajaNorte", 861 | "PST8PDT", 862 | "US/Pacific", 863 | }, 864 | "WGT": []string{ 865 | "America/Godthab", 866 | "America/Nuuk", 867 | }, 868 | "WGST": []string{ 869 | "America/Godthab", 870 | "America/Nuuk", 871 | }, 872 | "ECT": []string{ 873 | "America/Guayaquil", 874 | }, 875 | "GYT": []string{ 876 | "America/Guyana", 877 | }, 878 | "BOT": []string{ 879 | "America/La_Paz", 880 | }, 881 | "BST": []string{ 882 | "America/La_Paz", 883 | "Europe/Belfast", 884 | "Europe/Guernsey", 885 | "Europe/Isle_of_Man", 886 | "Europe/Jersey", 887 | "Europe/London", 888 | "GB", 889 | "GB-Eire", 890 | "Pacific/Bougainville", 891 | }, 892 | "PET": []string{ 893 | "America/Lima", 894 | }, 895 | "PEST": []string{ 896 | "America/Lima", 897 | }, 898 | "PMST": []string{ 899 | "America/Miquelon", 900 | }, 901 | "PMDT": []string{ 902 | "America/Miquelon", 903 | }, 904 | "UYT": []string{ 905 | "America/Montevideo", 906 | }, 907 | "UYST": []string{ 908 | "America/Montevideo", 909 | }, 910 | "FNT": []string{ 911 | "America/Noronha", 912 | "Brazil/DeNoronha", 913 | }, 914 | "FNST": []string{ 915 | "America/Noronha", 916 | "Brazil/DeNoronha", 917 | }, 918 | "SRT": []string{ 919 | "America/Paramaribo", 920 | }, 921 | "CLT": []string{ 922 | "America/Punta_Arenas", 923 | "America/Santiago", 924 | "Chile/Continental", 925 | }, 926 | "CLST": []string{ 927 | "America/Santiago", 928 | "Chile/Continental", 929 | }, 930 | "EHDT": []string{ 931 | "America/Santo_Domingo", 932 | }, 933 | "EGT": []string{ 934 | "America/Scoresbysund", 935 | }, 936 | "EGST": []string{ 937 | "America/Scoresbysund", 938 | }, 939 | "NT": []string{ 940 | "America/St_Johns", 941 | "Canada/Newfoundland", 942 | }, 943 | "NST": []string{ 944 | "America/St_Johns", 945 | "Canada/Newfoundland", 946 | }, 947 | "NDT": []string{ 948 | "America/St_Johns", 949 | "Canada/Newfoundland", 950 | }, 951 | "AWT": []string{ 952 | "Antarctica/Casey", 953 | "Australia/Perth", 954 | "Australia/West", 955 | }, 956 | "AWST": []string{ 957 | "Antarctica/Casey", 958 | "Australia/Perth", 959 | "Australia/West", 960 | }, 961 | "DAVT": []string{ 962 | "Antarctica/Davis", 963 | }, 964 | "DDUT": []string{ 965 | "Antarctica/DumontDUrville", 966 | }, 967 | "MIST": []string{ 968 | "Antarctica/Macquarie", 969 | }, 970 | "MAWT": []string{ 971 | "Antarctica/Mawson", 972 | }, 973 | "NZT": []string{ 974 | "Antarctica/McMurdo", 975 | "Antarctica/South_Pole", 976 | "NZ", 977 | "Pacific/Auckland", 978 | }, 979 | "NZST": []string{ 980 | "Antarctica/McMurdo", 981 | "Antarctica/South_Pole", 982 | "NZ", 983 | "Pacific/Auckland", 984 | }, 985 | "NZDT": []string{ 986 | "Antarctica/McMurdo", 987 | "Antarctica/South_Pole", 988 | "NZ", 989 | "Pacific/Auckland", 990 | }, 991 | "ROTT": []string{ 992 | "Antarctica/Palmer", 993 | "Antarctica/Rothera", 994 | }, 995 | "SYOT": []string{ 996 | "Antarctica/Syowa", 997 | }, 998 | "VOST": []string{ 999 | "Antarctica/Vostok", 1000 | }, 1001 | "ALMT": []string{ 1002 | "Asia/Almaty", 1003 | "Asia/Qostanay", 1004 | }, 1005 | "ALMST": []string{ 1006 | "Asia/Almaty", 1007 | }, 1008 | "ANAT": []string{ 1009 | "Asia/Anadyr", 1010 | }, 1011 | "AQTT": []string{ 1012 | "Asia/Aqtau", 1013 | "Asia/Aqtobe", 1014 | "Asia/Atyrau", 1015 | }, 1016 | "AQTST": []string{ 1017 | "Asia/Aqtobe", 1018 | }, 1019 | "TMT": []string{ 1020 | "Asia/Ashgabat", 1021 | "Asia/Ashkhabad", 1022 | }, 1023 | "AZT": []string{ 1024 | "Asia/Baku", 1025 | }, 1026 | "AZST": []string{ 1027 | "Asia/Baku", 1028 | }, 1029 | "ICT": []string{ 1030 | "Asia/Bangkok", 1031 | "Asia/Ho_Chi_Minh", 1032 | "Asia/Phnom_Penh", 1033 | "Asia/Saigon", 1034 | "Asia/Vientiane", 1035 | }, 1036 | "KRAT": []string{ 1037 | "Asia/Barnaul", 1038 | "Asia/Krasnoyarsk", 1039 | "Asia/Novokuznetsk", 1040 | }, 1041 | "KGT": []string{ 1042 | "Asia/Bishkek", 1043 | }, 1044 | "BNT": []string{ 1045 | "Asia/Brunei", 1046 | }, 1047 | "IST": []string{ 1048 | "Asia/Calcutta", 1049 | "Asia/Colombo", 1050 | "Asia/Jerusalem", 1051 | "Asia/Kolkata", 1052 | "Asia/Tel_Aviv", 1053 | "Eire", 1054 | "Europe/Dublin", 1055 | "Israel", 1056 | }, 1057 | "YAKT": []string{ 1058 | "Asia/Chita", 1059 | "Asia/Khandyga", 1060 | "Asia/Yakutsk", 1061 | }, 1062 | "YAKST": []string{ 1063 | "Asia/Chita", 1064 | "Asia/Khandyga", 1065 | "Asia/Yakutsk", 1066 | }, 1067 | "CHOT": []string{ 1068 | "Asia/Choibalsan", 1069 | }, 1070 | "CHOST": []string{ 1071 | "Asia/Choibalsan", 1072 | }, 1073 | "BDT": []string{ 1074 | "Asia/Dacca", 1075 | "Asia/Dhaka", 1076 | }, 1077 | "BDST": []string{ 1078 | "Asia/Dacca", 1079 | "Asia/Dhaka", 1080 | }, 1081 | "TLT": []string{ 1082 | "Asia/Dili", 1083 | }, 1084 | "GST": []string{ 1085 | "Asia/Dubai", 1086 | "Asia/Muscat", 1087 | "Atlantic/South_Georgia", 1088 | }, 1089 | "TJT": []string{ 1090 | "Asia/Dushanbe", 1091 | }, 1092 | "TSD": []string{ 1093 | "Asia/Dushanbe", 1094 | }, 1095 | "HKT": []string{ 1096 | "Asia/Hong_Kong", 1097 | "Hongkong", 1098 | }, 1099 | "HKST": []string{ 1100 | "Asia/Hong_Kong", 1101 | "Hongkong", 1102 | }, 1103 | "HOVT": []string{ 1104 | "Asia/Hovd", 1105 | }, 1106 | "HOVST": []string{ 1107 | "Asia/Hovd", 1108 | }, 1109 | "IRKT": []string{ 1110 | "Asia/Irkutsk", 1111 | }, 1112 | "IRKST": []string{ 1113 | "Asia/Irkutsk", 1114 | }, 1115 | "TRT": []string{ 1116 | "Asia/Istanbul", 1117 | "Europe/Istanbul", 1118 | "Turkey", 1119 | }, 1120 | "WIB": []string{ 1121 | "Asia/Jakarta", 1122 | "Asia/Pontianak", 1123 | }, 1124 | "WIT": []string{ 1125 | "Asia/Jayapura", 1126 | }, 1127 | "IDT": []string{ 1128 | "Asia/Jerusalem", 1129 | "Asia/Tel_Aviv", 1130 | "Israel", 1131 | }, 1132 | "AFT": []string{ 1133 | "Asia/Kabul", 1134 | }, 1135 | "PETT": []string{ 1136 | "Asia/Kamchatka", 1137 | }, 1138 | "PKT": []string{ 1139 | "Asia/Karachi", 1140 | }, 1141 | "PKST": []string{ 1142 | "Asia/Karachi", 1143 | }, 1144 | "NPT": []string{ 1145 | "Asia/Kathmandu", 1146 | "Asia/Katmandu", 1147 | }, 1148 | "KRAST": []string{ 1149 | "Asia/Krasnoyarsk", 1150 | }, 1151 | "MYT": []string{ 1152 | "Asia/Kuala_Lumpur", 1153 | "Asia/Kuching", 1154 | }, 1155 | "MLAST": []string{ 1156 | "Asia/Kuala_Lumpur", 1157 | }, 1158 | "BORTST": []string{ 1159 | "Asia/Kuching", 1160 | }, 1161 | "MAGT": []string{ 1162 | "Asia/Magadan", 1163 | }, 1164 | "MAGST": []string{ 1165 | "Asia/Magadan", 1166 | "Asia/Srednekolymsk", 1167 | }, 1168 | "WITA": []string{ 1169 | "Asia/Makassar", 1170 | "Asia/Ujung_Pandang", 1171 | }, 1172 | "PHT": []string{ 1173 | "Asia/Manila", 1174 | }, 1175 | "PHST": []string{ 1176 | "Asia/Manila", 1177 | }, 1178 | "NOVT": []string{ 1179 | "Asia/Novosibirsk", 1180 | "Asia/Tomsk", 1181 | }, 1182 | "OMST": []string{ 1183 | "Asia/Omsk", 1184 | }, 1185 | "OMSST": []string{ 1186 | "Asia/Omsk", 1187 | }, 1188 | "ORAT": []string{ 1189 | "Asia/Oral", 1190 | }, 1191 | "KT": []string{ 1192 | "Asia/Pyongyang", 1193 | "Asia/Seoul", 1194 | "ROK", 1195 | }, 1196 | "KST": []string{ 1197 | "Asia/Pyongyang", 1198 | "Asia/Seoul", 1199 | "ROK", 1200 | }, 1201 | "QYZT": []string{ 1202 | "Asia/Qyzylorda", 1203 | }, 1204 | "QYZST": []string{ 1205 | "Asia/Qyzylorda", 1206 | }, 1207 | "MMT": []string{ 1208 | "Asia/Rangoon", 1209 | "Asia/Yangon", 1210 | }, 1211 | "SAKT": []string{ 1212 | "Asia/Sakhalin", 1213 | }, 1214 | "UZT": []string{ 1215 | "Asia/Samarkand", 1216 | "Asia/Tashkent", 1217 | }, 1218 | "UZST": []string{ 1219 | "Asia/Samarkand", 1220 | "Asia/Tashkent", 1221 | }, 1222 | "KDT": []string{ 1223 | "Asia/Seoul", 1224 | "ROK", 1225 | }, 1226 | "SGT": []string{ 1227 | "Asia/Singapore", 1228 | "Singapore", 1229 | }, 1230 | "MALST": []string{ 1231 | "Asia/Singapore", 1232 | "Singapore", 1233 | }, 1234 | "SRET": []string{ 1235 | "Asia/Srednekolymsk", 1236 | }, 1237 | "GET": []string{ 1238 | "Asia/Tbilisi", 1239 | }, 1240 | "IRST": []string{ 1241 | "Asia/Tehran", 1242 | "Iran", 1243 | }, 1244 | "IRDT": []string{ 1245 | "Asia/Tehran", 1246 | "Iran", 1247 | }, 1248 | "BTT": []string{ 1249 | "Asia/Thimbu", 1250 | "Asia/Thimphu", 1251 | }, 1252 | "JST": []string{ 1253 | "Asia/Tokyo", 1254 | "Japan", 1255 | }, 1256 | "JDT": []string{ 1257 | "Asia/Tokyo", 1258 | "Japan", 1259 | }, 1260 | "ULAT": []string{ 1261 | "Asia/Ulaanbaatar", 1262 | "Asia/Ulan_Bator", 1263 | }, 1264 | "ULAST": []string{ 1265 | "Asia/Ulaanbaatar", 1266 | "Asia/Ulan_Bator", 1267 | }, 1268 | "VLAT": []string{ 1269 | "Asia/Ust-Nera", 1270 | "Asia/Vladivostok", 1271 | }, 1272 | "VLAST": []string{ 1273 | "Asia/Ust-Nera", 1274 | "Asia/Vladivostok", 1275 | }, 1276 | "YEKT": []string{ 1277 | "Asia/Yekaterinburg", 1278 | }, 1279 | "YEKST": []string{ 1280 | "Asia/Yekaterinburg", 1281 | }, 1282 | "AZOT": []string{ 1283 | "Atlantic/Azores", 1284 | }, 1285 | "AZOST": []string{ 1286 | "Atlantic/Azores", 1287 | }, 1288 | "CVT": []string{ 1289 | "Atlantic/Cape_Verde", 1290 | }, 1291 | "FKT": []string{ 1292 | "Atlantic/Stanley", 1293 | }, 1294 | "AET": []string{ 1295 | "Australia/ACT", 1296 | "Australia/Brisbane", 1297 | "Australia/Canberra", 1298 | "Australia/Currie", 1299 | "Australia/Hobart", 1300 | "Australia/Lindeman", 1301 | "Australia/Melbourne", 1302 | "Australia/NSW", 1303 | "Australia/Queensland", 1304 | "Australia/Sydney", 1305 | "Australia/Tasmania", 1306 | "Australia/Victoria", 1307 | }, 1308 | "AEST": []string{ 1309 | "Australia/ACT", 1310 | "Australia/Brisbane", 1311 | "Australia/Canberra", 1312 | "Australia/Currie", 1313 | "Australia/Hobart", 1314 | "Australia/Lindeman", 1315 | "Australia/Melbourne", 1316 | "Australia/NSW", 1317 | "Australia/Queensland", 1318 | "Australia/Sydney", 1319 | "Australia/Tasmania", 1320 | "Australia/Victoria", 1321 | }, 1322 | "AEDT": []string{ 1323 | "Australia/ACT", 1324 | "Australia/Brisbane", 1325 | "Australia/Canberra", 1326 | "Australia/Currie", 1327 | "Australia/Hobart", 1328 | "Australia/Lindeman", 1329 | "Australia/Melbourne", 1330 | "Australia/NSW", 1331 | "Australia/Queensland", 1332 | "Australia/Sydney", 1333 | "Australia/Tasmania", 1334 | "Australia/Victoria", 1335 | }, 1336 | "ACDT": []string{ 1337 | "Australia/Adelaide", 1338 | "Australia/Broken_Hill", 1339 | "Australia/Darwin", 1340 | "Australia/South", 1341 | "Australia/Yancowinna", 1342 | }, 1343 | "ACWT": []string{ 1344 | "Australia/Eucla", 1345 | }, 1346 | "ACWST": []string{ 1347 | "Australia/Eucla", 1348 | }, 1349 | "ACWDT": []string{ 1350 | "Australia/Eucla", 1351 | }, 1352 | "LHT": []string{ 1353 | "Australia/LHI", 1354 | "Australia/Lord_Howe", 1355 | }, 1356 | "LHST": []string{ 1357 | "Australia/LHI", 1358 | "Australia/Lord_Howe", 1359 | }, 1360 | "LHDT": []string{ 1361 | "Australia/LHI", 1362 | "Australia/Lord_Howe", 1363 | }, 1364 | "AWDT": []string{ 1365 | "Australia/Perth", 1366 | "Australia/West", 1367 | }, 1368 | "EAST": []string{ 1369 | "Chile/EasterIsland", 1370 | "Pacific/Easter", 1371 | }, 1372 | "EASST": []string{ 1373 | "Chile/EasterIsland", 1374 | "Pacific/Easter", 1375 | "Pacific/Galapagos", 1376 | }, 1377 | "GMT-1": []string{ 1378 | "Etc/GMT+1", 1379 | }, 1380 | "GMT-10": []string{ 1381 | "Etc/GMT+10", 1382 | }, 1383 | "GMT-11": []string{ 1384 | "Etc/GMT+11", 1385 | }, 1386 | "GMT-12": []string{ 1387 | "Etc/GMT+12", 1388 | }, 1389 | "GMT-2": []string{ 1390 | "Etc/GMT+2", 1391 | }, 1392 | "GMT-3": []string{ 1393 | "Etc/GMT+3", 1394 | }, 1395 | "GMT-4": []string{ 1396 | "Etc/GMT+4", 1397 | }, 1398 | "GMT-5": []string{ 1399 | "Etc/GMT+5", 1400 | }, 1401 | "GMT-6": []string{ 1402 | "Etc/GMT+6", 1403 | }, 1404 | "GMT-7": []string{ 1405 | "Etc/GMT+7", 1406 | }, 1407 | "GMT-8": []string{ 1408 | "Etc/GMT+8", 1409 | }, 1410 | "GMT-9": []string{ 1411 | "Etc/GMT+9", 1412 | }, 1413 | "GMT+1": []string{ 1414 | "Etc/GMT-1", 1415 | }, 1416 | "GMT+10": []string{ 1417 | "Etc/GMT-10", 1418 | }, 1419 | "GMT+11": []string{ 1420 | "Etc/GMT-11", 1421 | }, 1422 | "GMT+12": []string{ 1423 | "Etc/GMT-12", 1424 | }, 1425 | "GMT+13": []string{ 1426 | "Etc/GMT-13", 1427 | }, 1428 | "GMT+14": []string{ 1429 | "Etc/GMT-14", 1430 | }, 1431 | "GMT+2": []string{ 1432 | "Etc/GMT-2", 1433 | }, 1434 | "GMT+3": []string{ 1435 | "Etc/GMT-3", 1436 | }, 1437 | "GMT+4": []string{ 1438 | "Etc/GMT-4", 1439 | }, 1440 | "GMT+5": []string{ 1441 | "Etc/GMT-5", 1442 | }, 1443 | "GMT+6": []string{ 1444 | "Etc/GMT-6", 1445 | }, 1446 | "GMT+7": []string{ 1447 | "Etc/GMT-7", 1448 | }, 1449 | "GMT+8": []string{ 1450 | "Etc/GMT-8", 1451 | }, 1452 | "GMT+9": []string{ 1453 | "Etc/GMT-9", 1454 | }, 1455 | "UTC": []string{ 1456 | "Etc/UCT", 1457 | "Etc/UTC", 1458 | "Etc/Universal", 1459 | "Etc/Zulu", 1460 | "UCT", 1461 | "UTC", 1462 | "Universal", 1463 | "Zulu", 1464 | }, 1465 | "SAMT": []string{ 1466 | "Europe/Astrakhan", 1467 | "Europe/Samara", 1468 | "Europe/Ulyanovsk", 1469 | }, 1470 | "MSK": []string{ 1471 | "Europe/Kirov", 1472 | "Europe/Minsk", 1473 | "Europe/Moscow", 1474 | "Europe/Simferopol", 1475 | "W-SU", 1476 | }, 1477 | "MSD": []string{ 1478 | "Europe/Kirov", 1479 | "Europe/Moscow", 1480 | "W-SU", 1481 | }, 1482 | "GMT+04:00": []string{ 1483 | "Europe/Saratov", 1484 | }, 1485 | "VOLT": []string{ 1486 | "Europe/Volgograd", 1487 | }, 1488 | "-00": []string{ 1489 | "Factory", 1490 | }, 1491 | "IOT": []string{ 1492 | "Indian/Chagos", 1493 | }, 1494 | "CXT": []string{ 1495 | "Indian/Christmas", 1496 | }, 1497 | "CCT": []string{ 1498 | "Indian/Cocos", 1499 | }, 1500 | "TFT": []string{ 1501 | "Indian/Kerguelen", 1502 | }, 1503 | "SCT": []string{ 1504 | "Indian/Mahe", 1505 | }, 1506 | "MVT": []string{ 1507 | "Indian/Maldives", 1508 | }, 1509 | "MUT": []string{ 1510 | "Indian/Mauritius", 1511 | }, 1512 | "MUST": []string{ 1513 | "Indian/Mauritius", 1514 | }, 1515 | "RET": []string{ 1516 | "Indian/Reunion", 1517 | }, 1518 | "IRT": []string{ 1519 | "Iran", 1520 | }, 1521 | "MHT": []string{ 1522 | "Kwajalein", 1523 | "Pacific/Kwajalein", 1524 | "Pacific/Majuro", 1525 | }, 1526 | "MET": []string{ 1527 | "MET", 1528 | }, 1529 | "MEST": []string{ 1530 | "MET", 1531 | }, 1532 | "CHAT": []string{ 1533 | "NZ-CHAT", 1534 | "Pacific/Chatham", 1535 | }, 1536 | "CHAST": []string{ 1537 | "NZ-CHAT", 1538 | "Pacific/Chatham", 1539 | }, 1540 | "CHADT": []string{ 1541 | "NZ-CHAT", 1542 | "Pacific/Chatham", 1543 | }, 1544 | "WST": []string{ 1545 | "Pacific/Apia", 1546 | }, 1547 | "WSDT": []string{ 1548 | "Pacific/Apia", 1549 | }, 1550 | "CHUT": []string{ 1551 | "Pacific/Chuuk", 1552 | "Pacific/Truk", 1553 | "Pacific/Yap", 1554 | }, 1555 | "VUT": []string{ 1556 | "Pacific/Efate", 1557 | }, 1558 | "VUST": []string{ 1559 | "Pacific/Efate", 1560 | }, 1561 | "PHOT": []string{ 1562 | "Pacific/Enderbury", 1563 | }, 1564 | "TKT": []string{ 1565 | "Pacific/Fakaofo", 1566 | }, 1567 | "FJT": []string{ 1568 | "Pacific/Fiji", 1569 | }, 1570 | "FJST": []string{ 1571 | "Pacific/Fiji", 1572 | }, 1573 | "TVT": []string{ 1574 | "Pacific/Funafuti", 1575 | }, 1576 | "GALT": []string{ 1577 | "Pacific/Galapagos", 1578 | }, 1579 | "GAMT": []string{ 1580 | "Pacific/Gambier", 1581 | }, 1582 | "SBT": []string{ 1583 | "Pacific/Guadalcanal", 1584 | }, 1585 | "ChST": []string{ 1586 | "Pacific/Guam", 1587 | "Pacific/Saipan", 1588 | }, 1589 | "GDT": []string{ 1590 | "Pacific/Guam", 1591 | "Pacific/Saipan", 1592 | }, 1593 | "LINT": []string{ 1594 | "Pacific/Kiritimati", 1595 | }, 1596 | "KOST": []string{ 1597 | "Pacific/Kosrae", 1598 | }, 1599 | "MART": []string{ 1600 | "Pacific/Marquesas", 1601 | }, 1602 | "SST": []string{ 1603 | "Pacific/Midway", 1604 | "Pacific/Pago_Pago", 1605 | "Pacific/Samoa", 1606 | "US/Samoa", 1607 | }, 1608 | "NRT": []string{ 1609 | "Pacific/Nauru", 1610 | }, 1611 | "NUT": []string{ 1612 | "Pacific/Niue", 1613 | }, 1614 | "NFT": []string{ 1615 | "Pacific/Norfolk", 1616 | }, 1617 | "NFDT": []string{ 1618 | "Pacific/Norfolk", 1619 | }, 1620 | "NCT": []string{ 1621 | "Pacific/Noumea", 1622 | }, 1623 | "NCST": []string{ 1624 | "Pacific/Noumea", 1625 | }, 1626 | "PWT": []string{ 1627 | "Pacific/Palau", 1628 | }, 1629 | "PONT": []string{ 1630 | "Pacific/Pohnpei", 1631 | "Pacific/Ponape", 1632 | }, 1633 | "PGT": []string{ 1634 | "Pacific/Port_Moresby", 1635 | }, 1636 | "CKT": []string{ 1637 | "Pacific/Rarotonga", 1638 | }, 1639 | "CKHST": []string{ 1640 | "Pacific/Rarotonga", 1641 | }, 1642 | "TAHT": []string{ 1643 | "Pacific/Tahiti", 1644 | }, 1645 | "GILT": []string{ 1646 | "Pacific/Tarawa", 1647 | }, 1648 | "TOT": []string{ 1649 | "Pacific/Tongatapu", 1650 | }, 1651 | "TOST": []string{ 1652 | "Pacific/Tongatapu", 1653 | }, 1654 | "WAKT": []string{ 1655 | "Pacific/Wake", 1656 | }, 1657 | "WFT": []string{ 1658 | "Pacific/Wallis", 1659 | }, 1660 | } 1661 | -------------------------------------------------------------------------------- /tools/gen-var-timezones.py: -------------------------------------------------------------------------------- 1 | import json 2 | import sys 3 | from jinja2 import Template 4 | 5 | def var_timezones(): 6 | data = {} 7 | abbr_timezones_json = sys.argv[1] 8 | with open(abbr_timezones_json) as f: 9 | data = json.load(f) 10 | 11 | tpl_text = '''var timezones = map[string][]string{ 12 | {%- for abbr in timezones %} 13 | "{{ abbr }}": []string{ 14 | {%- for tz in timezones[abbr] %} 15 | "{{ tz }}", 16 | {%- endfor %} 17 | }, 18 | {%- endfor %} 19 | }''' 20 | 21 | tpl = Template(tpl_text) 22 | 23 | print(tpl.render({"timezones": data})) 24 | 25 | if __name__ == "__main__": 26 | var_timezones() -------------------------------------------------------------------------------- /tools/gen-var-tzabbrinfos.py: -------------------------------------------------------------------------------- 1 | import json 2 | import sys 3 | from jinja2 import Template 4 | 5 | def var_tzabbrinfos(): 6 | data = {} 7 | data2 = {} 8 | abbrs_json = sys.argv[1] 9 | military_abbrs_json = sys.argv[2] 10 | with open(abbrs_json) as f: 11 | data = json.load(f) 12 | 13 | with open(military_abbrs_json) as f: 14 | data2 = json.load(f) 15 | 16 | tpl_text = '''var tzAbbrInfos = map[string][]*TzAbbreviationInfo{ 17 | {%- for abbr in tzinfos %} 18 | "{{ abbr }}": []*TzAbbreviationInfo{ 19 | {%- for tz in tzinfos[abbr] %} 20 | { 21 | countryCode: "{{ tz["country_code"] }}", 22 | isDST: {{ tz["is_dst"] | lower }}, 23 | name: "{{ tz["name"] }}", 24 | offset: {{ tz["offset"] }}, 25 | offsetHHMM: "{{ tz["offset_hhmm"] }}", 26 | }, 27 | {%- endfor %} 28 | }, 29 | {%- endfor %} 30 | // military timezones 31 | {%- for abbr in military_tzinfos %} 32 | "{{ abbr }}": []*TzAbbreviationInfo{ 33 | { 34 | name: "{{ military_tzinfos[abbr]["name"] }}", 35 | offset: {{ military_tzinfos[abbr]["offset"] }}, 36 | offsetHHMM: "{{ military_tzinfos[abbr]["offset_hhmm"] }}", 37 | }, 38 | }, 39 | {%- endfor %} 40 | }''' 41 | 42 | tpl = Template(tpl_text) 43 | 44 | print(tpl.render({"tzinfos": data, "military_tzinfos": data2})) 45 | 46 | if __name__ == "__main__": 47 | var_tzabbrinfos() -------------------------------------------------------------------------------- /tools/gen-var-tzinfos.py: -------------------------------------------------------------------------------- 1 | import json 2 | import sys 3 | from jinja2 import Template 4 | 5 | def var_tzinfos(): 6 | data = {} 7 | timezones_json = sys.argv[1] 8 | with open(timezones_json) as f: 9 | data = json.load(f) 10 | 11 | tpl_text = '''var tzInfos = map[string]*TzInfo{ 12 | {%- for tz in tzinfos %} 13 | "{{ tz }}": &TzInfo{ 14 | longGeneric: "{{ tzinfos[tz]["long"]["generic"] }}", 15 | longStandard: "{{ tzinfos[tz]["long"]["standard"] }}", 16 | longDaylight: "{{ tzinfos[tz]["long"]["daylight"] }}", 17 | shortGeneric: "{{ tzinfos[tz]["short"]["generic"] }}", 18 | shortStandard: "{{ tzinfos[tz]["short"]["standard"] }}", 19 | shortDaylight: "{{ tzinfos[tz]["short"]["daylight"] }}", 20 | standardOffset: {{ tzinfos[tz]["standard_offset"] }}, 21 | daylightOffset: {{ tzinfos[tz]["daylight_offset"] }}, 22 | standardOffsetHHMM: "{{ tzinfos[tz]["standard_offset_hhmm"] }}", 23 | daylightOffsetHHMM: "{{ tzinfos[tz]["daylight_offset_hhmm"] }}", 24 | countryCode: "{{ tzinfos[tz]["country_code"] }}", 25 | isDeprecated: {{ tzinfos[tz]["is_deprecated"] | lower }}, 26 | linkTo: "{{ tzinfos[tz]["link_to"] }}", 27 | lastDST: {{ tzinfos[tz]["last_dst"] }}, 28 | }, 29 | {%- endfor %} 30 | }''' 31 | 32 | tpl = Template(tpl_text) 33 | 34 | print(tpl.render({"tzinfos": data})) 35 | 36 | if __name__ == "__main__": 37 | var_tzinfos() -------------------------------------------------------------------------------- /tz_abbr_infos.go: -------------------------------------------------------------------------------- 1 | package timezone 2 | 3 | var tzAbbrInfos = map[string][]*TzAbbreviationInfo{ 4 | "GMT": []*TzAbbreviationInfo{ 5 | { 6 | countryCode: "", 7 | isDST: false, 8 | name: "Greenwich Mean Time", 9 | offset: 0, 10 | offsetHHMM: "+00:00", 11 | }, 12 | }, 13 | "GHST": []*TzAbbreviationInfo{ 14 | { 15 | countryCode: "GH", 16 | isDST: true, 17 | name: "Ghana Summer Time", 18 | offset: 1200, 19 | offsetHHMM: "+00:20", 20 | }, 21 | }, 22 | "EAT": []*TzAbbreviationInfo{ 23 | { 24 | countryCode: "ET", 25 | isDST: false, 26 | name: "East Africa Time", 27 | offset: 10800, 28 | offsetHHMM: "+03:00", 29 | }, 30 | }, 31 | "CET": []*TzAbbreviationInfo{ 32 | { 33 | countryCode: "DZ", 34 | isDST: false, 35 | name: "Central European Time/Central European Standard Time", 36 | offset: 3600, 37 | offsetHHMM: "+01:00", 38 | }, 39 | }, 40 | "WAT": []*TzAbbreviationInfo{ 41 | { 42 | countryCode: "CF", 43 | isDST: false, 44 | name: "West Africa Time/West Africa Standard Time", 45 | offset: 3600, 46 | offsetHHMM: "+01:00", 47 | }, 48 | }, 49 | "CAT": []*TzAbbreviationInfo{ 50 | { 51 | countryCode: "MW", 52 | isDST: false, 53 | name: "Central Africa Time", 54 | offset: 7200, 55 | offsetHHMM: "+02:00", 56 | }, 57 | }, 58 | "EET": []*TzAbbreviationInfo{ 59 | { 60 | countryCode: "EG", 61 | isDST: false, 62 | name: "Eastern European Time/Eastern European Standard Time", 63 | offset: 7200, 64 | offsetHHMM: "+02:00", 65 | }, 66 | }, 67 | "EEST": []*TzAbbreviationInfo{ 68 | { 69 | countryCode: "EG", 70 | isDST: true, 71 | name: "Eastern European Summer Time", 72 | offset: 10800, 73 | offsetHHMM: "+03:00", 74 | }, 75 | }, 76 | "WET": []*TzAbbreviationInfo{ 77 | { 78 | countryCode: "MA", 79 | isDST: false, 80 | name: "Western European Time/Western European Standard Time", 81 | offset: 0, 82 | offsetHHMM: "+00:00", 83 | }, 84 | { 85 | countryCode: "", 86 | isDST: false, 87 | name: "Western European Standard Time", 88 | offset: 0, 89 | offsetHHMM: "+00:00", 90 | }, 91 | }, 92 | "WEST": []*TzAbbreviationInfo{ 93 | { 94 | countryCode: "MA", 95 | isDST: true, 96 | name: "Western European Summer Time", 97 | offset: 3600, 98 | offsetHHMM: "+01:00", 99 | }, 100 | }, 101 | "CEST": []*TzAbbreviationInfo{ 102 | { 103 | countryCode: "ES", 104 | isDST: true, 105 | name: "Central European Summer Time", 106 | offset: 7200, 107 | offsetHHMM: "+02:00", 108 | }, 109 | }, 110 | "SAST": []*TzAbbreviationInfo{ 111 | { 112 | countryCode: "ZA", 113 | isDST: false, 114 | name: "South Africa Standard Time", 115 | offset: 7200, 116 | offsetHHMM: "+02:00", 117 | }, 118 | { 119 | countryCode: "ZA", 120 | isDST: true, 121 | name: "South Africa Summer Time", 122 | offset: 10800, 123 | offsetHHMM: "+03:00", 124 | }, 125 | }, 126 | "CAST": []*TzAbbreviationInfo{ 127 | { 128 | countryCode: "SD", 129 | isDST: true, 130 | name: "Central Africa Summer Time", 131 | offset: 10800, 132 | offsetHHMM: "+03:00", 133 | }, 134 | }, 135 | "HAT": []*TzAbbreviationInfo{ 136 | { 137 | countryCode: "US", 138 | isDST: false, 139 | name: "Hawaii-Aleutian Time", 140 | offset: -36000, 141 | offsetHHMM: "-10:00", 142 | }, 143 | }, 144 | "HAST": []*TzAbbreviationInfo{ 145 | { 146 | countryCode: "US", 147 | isDST: false, 148 | name: "Hawaii-Aleutian Standard Time", 149 | offset: -36000, 150 | offsetHHMM: "-10:00", 151 | }, 152 | }, 153 | "HADT": []*TzAbbreviationInfo{ 154 | { 155 | countryCode: "US", 156 | isDST: true, 157 | name: "Hawaii-Aleutian Daylight Time", 158 | offset: -32400, 159 | offsetHHMM: "-09:00", 160 | }, 161 | }, 162 | "AKT": []*TzAbbreviationInfo{ 163 | { 164 | countryCode: "US", 165 | isDST: false, 166 | name: "Alaska Time", 167 | offset: -32400, 168 | offsetHHMM: "-09:00", 169 | }, 170 | }, 171 | "AKST": []*TzAbbreviationInfo{ 172 | { 173 | countryCode: "US", 174 | isDST: false, 175 | name: "Alaska Standard Time", 176 | offset: -32400, 177 | offsetHHMM: "-09:00", 178 | }, 179 | }, 180 | "AKDT": []*TzAbbreviationInfo{ 181 | { 182 | countryCode: "US", 183 | isDST: true, 184 | name: "Alaska Daylight Time", 185 | offset: -28800, 186 | offsetHHMM: "-08:00", 187 | }, 188 | }, 189 | "AT": []*TzAbbreviationInfo{ 190 | { 191 | countryCode: "AI", 192 | isDST: false, 193 | name: "Atlantic Time", 194 | offset: -14400, 195 | offsetHHMM: "-04:00", 196 | }, 197 | }, 198 | "AST": []*TzAbbreviationInfo{ 199 | { 200 | countryCode: "AI", 201 | isDST: false, 202 | name: "Atlantic Standard Time", 203 | offset: -14400, 204 | offsetHHMM: "-04:00", 205 | }, 206 | { 207 | countryCode: "YE", 208 | isDST: false, 209 | name: "Arabian Time/Arabian Standard Time", 210 | offset: 10800, 211 | offsetHHMM: "+03:00", 212 | }, 213 | }, 214 | "BRT": []*TzAbbreviationInfo{ 215 | { 216 | countryCode: "BR", 217 | isDST: false, 218 | name: "Brasilia Time/Brasilia Standard Time", 219 | offset: -10800, 220 | offsetHHMM: "-03:00", 221 | }, 222 | }, 223 | "BRST": []*TzAbbreviationInfo{ 224 | { 225 | countryCode: "BR", 226 | isDST: true, 227 | name: "Brasilia Summer Time", 228 | offset: -7200, 229 | offsetHHMM: "-02:00", 230 | }, 231 | }, 232 | "ART": []*TzAbbreviationInfo{ 233 | { 234 | countryCode: "AR", 235 | isDST: false, 236 | name: "Argentina Time/Argentina Standard Time", 237 | offset: -10800, 238 | offsetHHMM: "-03:00", 239 | }, 240 | }, 241 | "ARST": []*TzAbbreviationInfo{ 242 | { 243 | countryCode: "AR", 244 | isDST: true, 245 | name: "Argentina Summer Time", 246 | offset: -7200, 247 | offsetHHMM: "-02:00", 248 | }, 249 | }, 250 | "PYT": []*TzAbbreviationInfo{ 251 | { 252 | countryCode: "PY", 253 | isDST: false, 254 | name: "Paraguay Time/Paraguay Standard Time", 255 | offset: -14400, 256 | offsetHHMM: "-04:00", 257 | }, 258 | }, 259 | "PYST": []*TzAbbreviationInfo{ 260 | { 261 | countryCode: "PY", 262 | isDST: true, 263 | name: "Paraguay Summer Time", 264 | offset: -10800, 265 | offsetHHMM: "-03:00", 266 | }, 267 | }, 268 | "ET": []*TzAbbreviationInfo{ 269 | { 270 | countryCode: "CA", 271 | isDST: false, 272 | name: "Eastern Time", 273 | offset: -18000, 274 | offsetHHMM: "-05:00", 275 | }, 276 | }, 277 | "EST": []*TzAbbreviationInfo{ 278 | { 279 | countryCode: "CA", 280 | isDST: false, 281 | name: "Eastern Standard Time", 282 | offset: -18000, 283 | offsetHHMM: "-05:00", 284 | }, 285 | }, 286 | "CT": []*TzAbbreviationInfo{ 287 | { 288 | countryCode: "MX", 289 | isDST: false, 290 | name: "Central Time", 291 | offset: -21600, 292 | offsetHHMM: "-06:00", 293 | }, 294 | { 295 | countryCode: "CU", 296 | isDST: false, 297 | name: "Cuba Time", 298 | offset: -18000, 299 | offsetHHMM: "-05:00", 300 | }, 301 | { 302 | countryCode: "CN", 303 | isDST: false, 304 | name: "China Time", 305 | offset: 28800, 306 | offsetHHMM: "+08:00", 307 | }, 308 | { 309 | countryCode: "TW", 310 | isDST: false, 311 | name: "Taipei Time", 312 | offset: 28800, 313 | offsetHHMM: "+08:00", 314 | }, 315 | }, 316 | "CST": []*TzAbbreviationInfo{ 317 | { 318 | countryCode: "MX", 319 | isDST: false, 320 | name: "Central Standard Time", 321 | offset: -21600, 322 | offsetHHMM: "-06:00", 323 | }, 324 | { 325 | countryCode: "CU", 326 | isDST: false, 327 | name: "Cuba Standard Time", 328 | offset: -18000, 329 | offsetHHMM: "-05:00", 330 | }, 331 | { 332 | countryCode: "CN", 333 | isDST: false, 334 | name: "China Standard Time", 335 | offset: 28800, 336 | offsetHHMM: "+08:00", 337 | }, 338 | { 339 | countryCode: "TW", 340 | isDST: false, 341 | name: "Taipei Standard Time", 342 | offset: 28800, 343 | offsetHHMM: "+08:00", 344 | }, 345 | }, 346 | "CDT": []*TzAbbreviationInfo{ 347 | { 348 | countryCode: "MX", 349 | isDST: true, 350 | name: "Central Daylight Time", 351 | offset: -18000, 352 | offsetHHMM: "-05:00", 353 | }, 354 | { 355 | countryCode: "CU", 356 | isDST: true, 357 | name: "Cuba Daylight Time", 358 | offset: -14400, 359 | offsetHHMM: "-04:00", 360 | }, 361 | { 362 | countryCode: "CN", 363 | isDST: true, 364 | name: "China Daylight Time", 365 | offset: 32400, 366 | offsetHHMM: "+09:00", 367 | }, 368 | { 369 | countryCode: "TW", 370 | isDST: true, 371 | name: "Taipei Daylight Time", 372 | offset: 32400, 373 | offsetHHMM: "+09:00", 374 | }, 375 | }, 376 | "ADT": []*TzAbbreviationInfo{ 377 | { 378 | countryCode: "BB", 379 | isDST: true, 380 | name: "Atlantic Daylight Time", 381 | offset: -10800, 382 | offsetHHMM: "-03:00", 383 | }, 384 | { 385 | countryCode: "IQ", 386 | isDST: true, 387 | name: "Arabian Daylight Time", 388 | offset: 14400, 389 | offsetHHMM: "+04:00", 390 | }, 391 | }, 392 | "AMT": []*TzAbbreviationInfo{ 393 | { 394 | countryCode: "BR", 395 | isDST: false, 396 | name: "Amazon Time/Amazon Standard Time", 397 | offset: -14400, 398 | offsetHHMM: "-04:00", 399 | }, 400 | { 401 | countryCode: "AM", 402 | isDST: false, 403 | name: "Armenia Time/Armenia Standard Time", 404 | offset: 14400, 405 | offsetHHMM: "+04:00", 406 | }, 407 | }, 408 | "AMST": []*TzAbbreviationInfo{ 409 | { 410 | countryCode: "BR", 411 | isDST: true, 412 | name: "Amazon Summer Time", 413 | offset: -10800, 414 | offsetHHMM: "-03:00", 415 | }, 416 | { 417 | countryCode: "AM", 418 | isDST: true, 419 | name: "Armenia Summer Time", 420 | offset: 18000, 421 | offsetHHMM: "+05:00", 422 | }, 423 | }, 424 | "COT": []*TzAbbreviationInfo{ 425 | { 426 | countryCode: "CO", 427 | isDST: false, 428 | name: "Colombia Time/Colombia Standard Time", 429 | offset: -18000, 430 | offsetHHMM: "-05:00", 431 | }, 432 | }, 433 | "COST": []*TzAbbreviationInfo{ 434 | { 435 | countryCode: "CO", 436 | isDST: true, 437 | name: "Colombia Summer Time", 438 | offset: -14400, 439 | offsetHHMM: "-04:00", 440 | }, 441 | }, 442 | "MT": []*TzAbbreviationInfo{ 443 | { 444 | countryCode: "US", 445 | isDST: false, 446 | name: "Mountain Time", 447 | offset: -25200, 448 | offsetHHMM: "-07:00", 449 | }, 450 | { 451 | countryCode: "MX", 452 | isDST: false, 453 | name: "Mexican Pacific Time", 454 | offset: -25200, 455 | offsetHHMM: "-07:00", 456 | }, 457 | }, 458 | "MST": []*TzAbbreviationInfo{ 459 | { 460 | countryCode: "US", 461 | isDST: false, 462 | name: "Mountain Standard Time", 463 | offset: -25200, 464 | offsetHHMM: "-07:00", 465 | }, 466 | { 467 | countryCode: "MX", 468 | isDST: false, 469 | name: "Mexican Pacific Standard Time", 470 | offset: -25200, 471 | offsetHHMM: "-07:00", 472 | }, 473 | }, 474 | "MDT": []*TzAbbreviationInfo{ 475 | { 476 | countryCode: "US", 477 | isDST: true, 478 | name: "Mountain Daylight Time", 479 | offset: -21600, 480 | offsetHHMM: "-06:00", 481 | }, 482 | { 483 | countryCode: "MX", 484 | isDST: true, 485 | name: "Mexican Pacific Daylight Time", 486 | offset: -21600, 487 | offsetHHMM: "-06:00", 488 | }, 489 | }, 490 | "VET": []*TzAbbreviationInfo{ 491 | { 492 | countryCode: "VE", 493 | isDST: false, 494 | name: "Venezuela Time", 495 | offset: -14400, 496 | offsetHHMM: "-04:00", 497 | }, 498 | }, 499 | "GFT": []*TzAbbreviationInfo{ 500 | { 501 | countryCode: "GF", 502 | isDST: false, 503 | name: "French Guiana Time", 504 | offset: -10800, 505 | offsetHHMM: "-03:00", 506 | }, 507 | }, 508 | "PT": []*TzAbbreviationInfo{ 509 | { 510 | countryCode: "CA", 511 | isDST: false, 512 | name: "Pacific Time", 513 | offset: -25200, 514 | offsetHHMM: "-07:00", 515 | }, 516 | }, 517 | "PST": []*TzAbbreviationInfo{ 518 | { 519 | countryCode: "CA", 520 | isDST: false, 521 | name: "Pacific Standard Time", 522 | offset: -28800, 523 | offsetHHMM: "-08:00", 524 | }, 525 | { 526 | countryCode: "PN", 527 | isDST: false, 528 | name: "Pitcairn Time", 529 | offset: -28800, 530 | offsetHHMM: "-08:00", 531 | }, 532 | }, 533 | "EDT": []*TzAbbreviationInfo{ 534 | { 535 | countryCode: "US", 536 | isDST: true, 537 | name: "Eastern Daylight Time", 538 | offset: -14400, 539 | offsetHHMM: "-04:00", 540 | }, 541 | }, 542 | "ACT": []*TzAbbreviationInfo{ 543 | { 544 | countryCode: "BR", 545 | isDST: false, 546 | name: "Acre Time/Acre Standard Time", 547 | offset: -18000, 548 | offsetHHMM: "-05:00", 549 | }, 550 | { 551 | countryCode: "AU", 552 | isDST: false, 553 | name: "Central Australia Time", 554 | offset: 34200, 555 | offsetHHMM: "+09:30", 556 | }, 557 | }, 558 | "ACST": []*TzAbbreviationInfo{ 559 | { 560 | countryCode: "BR", 561 | isDST: true, 562 | name: "Acre Summer Time", 563 | offset: -14400, 564 | offsetHHMM: "-04:00", 565 | }, 566 | { 567 | countryCode: "AU", 568 | isDST: false, 569 | name: "Australian Central Standard Time", 570 | offset: 34200, 571 | offsetHHMM: "+09:30", 572 | }, 573 | }, 574 | "PDT": []*TzAbbreviationInfo{ 575 | { 576 | countryCode: "MX", 577 | isDST: true, 578 | name: "Pacific Daylight Time", 579 | offset: -25200, 580 | offsetHHMM: "-07:00", 581 | }, 582 | }, 583 | "WGT": []*TzAbbreviationInfo{ 584 | { 585 | countryCode: "GL", 586 | isDST: false, 587 | name: "West Greenland Time/West Greenland Standard Time", 588 | offset: -10800, 589 | offsetHHMM: "-03:00", 590 | }, 591 | }, 592 | "WGST": []*TzAbbreviationInfo{ 593 | { 594 | countryCode: "GL", 595 | isDST: true, 596 | name: "West Greenland Summer Time", 597 | offset: -7200, 598 | offsetHHMM: "-02:00", 599 | }, 600 | }, 601 | "ECT": []*TzAbbreviationInfo{ 602 | { 603 | countryCode: "EC", 604 | isDST: false, 605 | name: "Ecuador Time", 606 | offset: -18000, 607 | offsetHHMM: "-05:00", 608 | }, 609 | }, 610 | "GYT": []*TzAbbreviationInfo{ 611 | { 612 | countryCode: "GY", 613 | isDST: false, 614 | name: "Guyana Time", 615 | offset: -14400, 616 | offsetHHMM: "-04:00", 617 | }, 618 | }, 619 | "BOT": []*TzAbbreviationInfo{ 620 | { 621 | countryCode: "BO", 622 | isDST: false, 623 | name: "Bolivia Time", 624 | offset: -14400, 625 | offsetHHMM: "-04:00", 626 | }, 627 | }, 628 | "BST": []*TzAbbreviationInfo{ 629 | { 630 | countryCode: "BO", 631 | isDST: true, 632 | name: "Bolivia Summer Time", 633 | offset: -12756, 634 | offsetHHMM: "-03:27", 635 | }, 636 | { 637 | countryCode: "GB", 638 | isDST: true, 639 | name: "British Summer Time", 640 | offset: 3600, 641 | offsetHHMM: "+01:00", 642 | }, 643 | { 644 | countryCode: "PG", 645 | isDST: false, 646 | name: "Bougainville Standard Time", 647 | offset: 39600, 648 | offsetHHMM: "+11:00", 649 | }, 650 | }, 651 | "PET": []*TzAbbreviationInfo{ 652 | { 653 | countryCode: "PE", 654 | isDST: false, 655 | name: "Peru Time/Peru Standard Time", 656 | offset: -18000, 657 | offsetHHMM: "-05:00", 658 | }, 659 | }, 660 | "PEST": []*TzAbbreviationInfo{ 661 | { 662 | countryCode: "PE", 663 | isDST: true, 664 | name: "Peru Summer Time", 665 | offset: -14400, 666 | offsetHHMM: "-04:00", 667 | }, 668 | }, 669 | "PMST": []*TzAbbreviationInfo{ 670 | { 671 | countryCode: "PM", 672 | isDST: false, 673 | name: "St. Pierre & Miquelon Time/St. Pierre & Miquelon Standard Time", 674 | offset: -10800, 675 | offsetHHMM: "-03:00", 676 | }, 677 | }, 678 | "PMDT": []*TzAbbreviationInfo{ 679 | { 680 | countryCode: "PM", 681 | isDST: true, 682 | name: "St. Pierre & Miquelon Daylight Time", 683 | offset: -7200, 684 | offsetHHMM: "-02:00", 685 | }, 686 | }, 687 | "UYT": []*TzAbbreviationInfo{ 688 | { 689 | countryCode: "UY", 690 | isDST: false, 691 | name: "Uruguay Time/Uruguay Standard Time", 692 | offset: -10800, 693 | offsetHHMM: "-03:00", 694 | }, 695 | }, 696 | "UYST": []*TzAbbreviationInfo{ 697 | { 698 | countryCode: "UY", 699 | isDST: true, 700 | name: "Uruguay Summer Time", 701 | offset: -7200, 702 | offsetHHMM: "-02:00", 703 | }, 704 | }, 705 | "FNT": []*TzAbbreviationInfo{ 706 | { 707 | countryCode: "BR", 708 | isDST: false, 709 | name: "Fernando de Noronha Time/Fernando de Noronha Standard Time", 710 | offset: -7200, 711 | offsetHHMM: "-02:00", 712 | }, 713 | }, 714 | "FNST": []*TzAbbreviationInfo{ 715 | { 716 | countryCode: "BR", 717 | isDST: true, 718 | name: "Fernando de Noronha Summer Time", 719 | offset: -3600, 720 | offsetHHMM: "-01:00", 721 | }, 722 | }, 723 | "SRT": []*TzAbbreviationInfo{ 724 | { 725 | countryCode: "SR", 726 | isDST: false, 727 | name: "Suriname Time", 728 | offset: -10800, 729 | offsetHHMM: "-03:00", 730 | }, 731 | }, 732 | "CLT": []*TzAbbreviationInfo{ 733 | { 734 | countryCode: "CL", 735 | isDST: false, 736 | name: "Chile Time/Chile Standard Time", 737 | offset: -10800, 738 | offsetHHMM: "-03:00", 739 | }, 740 | }, 741 | "CLST": []*TzAbbreviationInfo{ 742 | { 743 | countryCode: "CL", 744 | isDST: true, 745 | name: "Chile Summer Time", 746 | offset: -10800, 747 | offsetHHMM: "-03:00", 748 | }, 749 | }, 750 | "EHDT": []*TzAbbreviationInfo{ 751 | { 752 | countryCode: "DO", 753 | isDST: true, 754 | name: "Eastern Half Daylight Time", 755 | offset: -16200, 756 | offsetHHMM: "-04:30", 757 | }, 758 | }, 759 | "EGT": []*TzAbbreviationInfo{ 760 | { 761 | countryCode: "GL", 762 | isDST: false, 763 | name: "East Greenland Time/East Greenland Standard Time", 764 | offset: -3600, 765 | offsetHHMM: "-01:00", 766 | }, 767 | }, 768 | "EGST": []*TzAbbreviationInfo{ 769 | { 770 | countryCode: "GL", 771 | isDST: true, 772 | name: "East Greenland Summer Time", 773 | offset: 0, 774 | offsetHHMM: "+00:00", 775 | }, 776 | }, 777 | "NT": []*TzAbbreviationInfo{ 778 | { 779 | countryCode: "CA", 780 | isDST: false, 781 | name: "Newfoundland Time", 782 | offset: -12600, 783 | offsetHHMM: "-03:30", 784 | }, 785 | }, 786 | "NST": []*TzAbbreviationInfo{ 787 | { 788 | countryCode: "CA", 789 | isDST: false, 790 | name: "Newfoundland Standard Time", 791 | offset: -12600, 792 | offsetHHMM: "-03:30", 793 | }, 794 | }, 795 | "NDT": []*TzAbbreviationInfo{ 796 | { 797 | countryCode: "CA", 798 | isDST: true, 799 | name: "Newfoundland Daylight Time", 800 | offset: -9000, 801 | offsetHHMM: "-02:30", 802 | }, 803 | }, 804 | "AWT": []*TzAbbreviationInfo{ 805 | { 806 | countryCode: "AQ", 807 | isDST: false, 808 | name: "Australian Western Time", 809 | offset: 28800, 810 | offsetHHMM: "+08:00", 811 | }, 812 | }, 813 | "AWST": []*TzAbbreviationInfo{ 814 | { 815 | countryCode: "AQ", 816 | isDST: false, 817 | name: "Australian Western Standard Time", 818 | offset: 28800, 819 | offsetHHMM: "+08:00", 820 | }, 821 | }, 822 | "DAVT": []*TzAbbreviationInfo{ 823 | { 824 | countryCode: "AQ", 825 | isDST: false, 826 | name: "Davis Time", 827 | offset: 25200, 828 | offsetHHMM: "+07:00", 829 | }, 830 | }, 831 | "DDUT": []*TzAbbreviationInfo{ 832 | { 833 | countryCode: "AQ", 834 | isDST: false, 835 | name: "Dumont-d’Urville Time", 836 | offset: 36000, 837 | offsetHHMM: "+10:00", 838 | }, 839 | }, 840 | "MIST": []*TzAbbreviationInfo{ 841 | { 842 | countryCode: "AU", 843 | isDST: false, 844 | name: "Macquarie Island Time", 845 | offset: 39600, 846 | offsetHHMM: "+11:00", 847 | }, 848 | }, 849 | "MAWT": []*TzAbbreviationInfo{ 850 | { 851 | countryCode: "AQ", 852 | isDST: false, 853 | name: "Mawson Time", 854 | offset: 18000, 855 | offsetHHMM: "+05:00", 856 | }, 857 | }, 858 | "NZT": []*TzAbbreviationInfo{ 859 | { 860 | countryCode: "AQ", 861 | isDST: false, 862 | name: "New Zealand Time", 863 | offset: 43200, 864 | offsetHHMM: "+12:00", 865 | }, 866 | }, 867 | "NZST": []*TzAbbreviationInfo{ 868 | { 869 | countryCode: "AQ", 870 | isDST: false, 871 | name: "New Zealand Standard Time", 872 | offset: 43200, 873 | offsetHHMM: "+12:00", 874 | }, 875 | }, 876 | "NZDT": []*TzAbbreviationInfo{ 877 | { 878 | countryCode: "AQ", 879 | isDST: true, 880 | name: "New Zealand Daylight Time", 881 | offset: 46800, 882 | offsetHHMM: "+13:00", 883 | }, 884 | }, 885 | "ROTT": []*TzAbbreviationInfo{ 886 | { 887 | countryCode: "AQ", 888 | isDST: false, 889 | name: "Rothera Time", 890 | offset: -10800, 891 | offsetHHMM: "-03:00", 892 | }, 893 | }, 894 | "SYOT": []*TzAbbreviationInfo{ 895 | { 896 | countryCode: "AQ", 897 | isDST: false, 898 | name: "Syowa Time", 899 | offset: 10800, 900 | offsetHHMM: "+03:00", 901 | }, 902 | }, 903 | "VOST": []*TzAbbreviationInfo{ 904 | { 905 | countryCode: "AQ", 906 | isDST: false, 907 | name: "Vostok Time", 908 | offset: 21600, 909 | offsetHHMM: "+06:00", 910 | }, 911 | }, 912 | "ALMT": []*TzAbbreviationInfo{ 913 | { 914 | countryCode: "KZ", 915 | isDST: false, 916 | name: "Almaty Time/Almaty Standard Time", 917 | offset: 21600, 918 | offsetHHMM: "+06:00", 919 | }, 920 | { 921 | countryCode: "KZ", 922 | isDST: false, 923 | name: "Almaty Standard Time", 924 | offset: 21600, 925 | offsetHHMM: "+06:00", 926 | }, 927 | }, 928 | "ALMST": []*TzAbbreviationInfo{ 929 | { 930 | countryCode: "KZ", 931 | isDST: true, 932 | name: "Almaty Summer Time", 933 | offset: 25200, 934 | offsetHHMM: "+07:00", 935 | }, 936 | }, 937 | "ANAT": []*TzAbbreviationInfo{ 938 | { 939 | countryCode: "RU", 940 | isDST: false, 941 | name: "Anadyr Time/Anadyr Standard Time", 942 | offset: 43200, 943 | offsetHHMM: "+12:00", 944 | }, 945 | }, 946 | "AQTT": []*TzAbbreviationInfo{ 947 | { 948 | countryCode: "KZ", 949 | isDST: false, 950 | name: "Aqtau Time/Aqtau Standard Time", 951 | offset: 18000, 952 | offsetHHMM: "+05:00", 953 | }, 954 | { 955 | countryCode: "KZ", 956 | isDST: false, 957 | name: "Aqtobe Time/Aqtobe Standard Time", 958 | offset: 18000, 959 | offsetHHMM: "+05:00", 960 | }, 961 | }, 962 | "AQTST": []*TzAbbreviationInfo{ 963 | { 964 | countryCode: "KZ", 965 | isDST: true, 966 | name: "Aqtobe Summer Time", 967 | offset: 21600, 968 | offsetHHMM: "+06:00", 969 | }, 970 | }, 971 | "TMT": []*TzAbbreviationInfo{ 972 | { 973 | countryCode: "TM", 974 | isDST: false, 975 | name: "Turkmenistan Time/Turkmenistan Standard Time", 976 | offset: 18000, 977 | offsetHHMM: "+05:00", 978 | }, 979 | }, 980 | "AZT": []*TzAbbreviationInfo{ 981 | { 982 | countryCode: "AZ", 983 | isDST: false, 984 | name: "Azerbaijan Time/Azerbaijan Standard Time", 985 | offset: 14400, 986 | offsetHHMM: "+04:00", 987 | }, 988 | }, 989 | "AZST": []*TzAbbreviationInfo{ 990 | { 991 | countryCode: "AZ", 992 | isDST: true, 993 | name: "Azerbaijan Summer Time", 994 | offset: 18000, 995 | offsetHHMM: "+05:00", 996 | }, 997 | }, 998 | "ICT": []*TzAbbreviationInfo{ 999 | { 1000 | countryCode: "TH", 1001 | isDST: false, 1002 | name: "Indochina Time", 1003 | offset: 25200, 1004 | offsetHHMM: "+07:00", 1005 | }, 1006 | }, 1007 | "KRAT": []*TzAbbreviationInfo{ 1008 | { 1009 | countryCode: "RU", 1010 | isDST: false, 1011 | name: "Krasnoyarsk Time/Krasnoyarsk Standard Time", 1012 | offset: 25200, 1013 | offsetHHMM: "+07:00", 1014 | }, 1015 | }, 1016 | "KGT": []*TzAbbreviationInfo{ 1017 | { 1018 | countryCode: "KG", 1019 | isDST: false, 1020 | name: "Kyrgyzstan Time", 1021 | offset: 21600, 1022 | offsetHHMM: "+06:00", 1023 | }, 1024 | }, 1025 | "BNT": []*TzAbbreviationInfo{ 1026 | { 1027 | countryCode: "BN", 1028 | isDST: false, 1029 | name: "Brunei Darussalam Time", 1030 | offset: 28800, 1031 | offsetHHMM: "+08:00", 1032 | }, 1033 | }, 1034 | "IST": []*TzAbbreviationInfo{ 1035 | { 1036 | countryCode: "IN", 1037 | isDST: false, 1038 | name: "India Standard Time", 1039 | offset: 19800, 1040 | offsetHHMM: "+05:30", 1041 | }, 1042 | { 1043 | countryCode: "IN", 1044 | isDST: true, 1045 | name: "India Summer Time", 1046 | offset: 23400, 1047 | offsetHHMM: "+06:30", 1048 | }, 1049 | { 1050 | countryCode: "IL", 1051 | isDST: false, 1052 | name: "Israel Time/Israel Standard Time", 1053 | offset: 7200, 1054 | offsetHHMM: "+02:00", 1055 | }, 1056 | { 1057 | countryCode: "IE", 1058 | isDST: true, 1059 | name: "Irish Standard Time", 1060 | offset: 3600, 1061 | offsetHHMM: "+01:00", 1062 | }, 1063 | }, 1064 | "YAKT": []*TzAbbreviationInfo{ 1065 | { 1066 | countryCode: "RU", 1067 | isDST: false, 1068 | name: "Yakutsk Time/Yakutsk Standard Time", 1069 | offset: 32400, 1070 | offsetHHMM: "+09:00", 1071 | }, 1072 | }, 1073 | "YAKST": []*TzAbbreviationInfo{ 1074 | { 1075 | countryCode: "RU", 1076 | isDST: true, 1077 | name: "Yakutsk Summer Time", 1078 | offset: 36000, 1079 | offsetHHMM: "+10:00", 1080 | }, 1081 | }, 1082 | "CHOT": []*TzAbbreviationInfo{ 1083 | { 1084 | countryCode: "MN", 1085 | isDST: false, 1086 | name: "Choibalsan Time/Choibalsan Standard Time", 1087 | offset: 28800, 1088 | offsetHHMM: "+08:00", 1089 | }, 1090 | }, 1091 | "CHOST": []*TzAbbreviationInfo{ 1092 | { 1093 | countryCode: "MN", 1094 | isDST: true, 1095 | name: "Choibalsan Summer Time", 1096 | offset: 32400, 1097 | offsetHHMM: "+09:00", 1098 | }, 1099 | }, 1100 | "BDT": []*TzAbbreviationInfo{ 1101 | { 1102 | countryCode: "BD", 1103 | isDST: false, 1104 | name: "Bangladesh Time/Bangladesh Standard Time", 1105 | offset: 21600, 1106 | offsetHHMM: "+06:00", 1107 | }, 1108 | }, 1109 | "BDST": []*TzAbbreviationInfo{ 1110 | { 1111 | countryCode: "BD", 1112 | isDST: true, 1113 | name: "Bangladesh Summer Time", 1114 | offset: 25200, 1115 | offsetHHMM: "+07:00", 1116 | }, 1117 | }, 1118 | "TLT": []*TzAbbreviationInfo{ 1119 | { 1120 | countryCode: "TL", 1121 | isDST: false, 1122 | name: "East Timor Time", 1123 | offset: 32400, 1124 | offsetHHMM: "+09:00", 1125 | }, 1126 | }, 1127 | "GST": []*TzAbbreviationInfo{ 1128 | { 1129 | countryCode: "AE", 1130 | isDST: false, 1131 | name: "Gulf Standard Time", 1132 | offset: 14400, 1133 | offsetHHMM: "+04:00", 1134 | }, 1135 | { 1136 | countryCode: "GS", 1137 | isDST: false, 1138 | name: "South Georgia Time", 1139 | offset: -7200, 1140 | offsetHHMM: "-02:00", 1141 | }, 1142 | }, 1143 | "TJT": []*TzAbbreviationInfo{ 1144 | { 1145 | countryCode: "TJ", 1146 | isDST: false, 1147 | name: "Tajikistan Time", 1148 | offset: 18000, 1149 | offsetHHMM: "+05:00", 1150 | }, 1151 | }, 1152 | "TSD": []*TzAbbreviationInfo{ 1153 | { 1154 | countryCode: "TJ", 1155 | isDST: true, 1156 | name: "Tashkent Summer Time", 1157 | offset: 21600, 1158 | offsetHHMM: "+06:00", 1159 | }, 1160 | }, 1161 | "HKT": []*TzAbbreviationInfo{ 1162 | { 1163 | countryCode: "HK", 1164 | isDST: false, 1165 | name: "Hong Kong Time/Hong Kong Standard Time", 1166 | offset: 28800, 1167 | offsetHHMM: "+08:00", 1168 | }, 1169 | }, 1170 | "HKST": []*TzAbbreviationInfo{ 1171 | { 1172 | countryCode: "HK", 1173 | isDST: true, 1174 | name: "Hong Kong Summer Time", 1175 | offset: 32400, 1176 | offsetHHMM: "+09:00", 1177 | }, 1178 | }, 1179 | "HOVT": []*TzAbbreviationInfo{ 1180 | { 1181 | countryCode: "MN", 1182 | isDST: false, 1183 | name: "Hovd Time/Hovd Standard Time", 1184 | offset: 25200, 1185 | offsetHHMM: "+07:00", 1186 | }, 1187 | }, 1188 | "HOVST": []*TzAbbreviationInfo{ 1189 | { 1190 | countryCode: "MN", 1191 | isDST: true, 1192 | name: "Hovd Summer Time", 1193 | offset: 28800, 1194 | offsetHHMM: "+08:00", 1195 | }, 1196 | }, 1197 | "IRKT": []*TzAbbreviationInfo{ 1198 | { 1199 | countryCode: "RU", 1200 | isDST: false, 1201 | name: "Irkutsk Time/Irkutsk Standard Time", 1202 | offset: 28800, 1203 | offsetHHMM: "+08:00", 1204 | }, 1205 | }, 1206 | "IRKST": []*TzAbbreviationInfo{ 1207 | { 1208 | countryCode: "RU", 1209 | isDST: true, 1210 | name: "Irkutsk Summer Time", 1211 | offset: 32400, 1212 | offsetHHMM: "+09:00", 1213 | }, 1214 | }, 1215 | "TRT": []*TzAbbreviationInfo{ 1216 | { 1217 | countryCode: "TR", 1218 | isDST: false, 1219 | name: "Turkey Time", 1220 | offset: 10800, 1221 | offsetHHMM: "+03:00", 1222 | }, 1223 | }, 1224 | "WIB": []*TzAbbreviationInfo{ 1225 | { 1226 | countryCode: "ID", 1227 | isDST: false, 1228 | name: "Western Indonesia Time", 1229 | offset: 25200, 1230 | offsetHHMM: "+07:00", 1231 | }, 1232 | }, 1233 | "WIT": []*TzAbbreviationInfo{ 1234 | { 1235 | countryCode: "ID", 1236 | isDST: false, 1237 | name: "Eastern Indonesia Time", 1238 | offset: 32400, 1239 | offsetHHMM: "+09:00", 1240 | }, 1241 | }, 1242 | "IDT": []*TzAbbreviationInfo{ 1243 | { 1244 | countryCode: "IL", 1245 | isDST: true, 1246 | name: "Israel Daylight Time", 1247 | offset: 10800, 1248 | offsetHHMM: "+03:00", 1249 | }, 1250 | }, 1251 | "AFT": []*TzAbbreviationInfo{ 1252 | { 1253 | countryCode: "AF", 1254 | isDST: false, 1255 | name: "Afghanistan Time", 1256 | offset: 16200, 1257 | offsetHHMM: "+04:30", 1258 | }, 1259 | }, 1260 | "PETT": []*TzAbbreviationInfo{ 1261 | { 1262 | countryCode: "RU", 1263 | isDST: false, 1264 | name: "Petropavlovsk-Kamchatski Time/Petropavlovsk-Kamchatski Standard Time", 1265 | offset: 43200, 1266 | offsetHHMM: "+12:00", 1267 | }, 1268 | }, 1269 | "PKT": []*TzAbbreviationInfo{ 1270 | { 1271 | countryCode: "PK", 1272 | isDST: false, 1273 | name: "Pakistan Time/Pakistan Standard Time", 1274 | offset: 18000, 1275 | offsetHHMM: "+05:00", 1276 | }, 1277 | }, 1278 | "PKST": []*TzAbbreviationInfo{ 1279 | { 1280 | countryCode: "PK", 1281 | isDST: true, 1282 | name: "Pakistan Summer Time", 1283 | offset: 21600, 1284 | offsetHHMM: "+06:00", 1285 | }, 1286 | }, 1287 | "NPT": []*TzAbbreviationInfo{ 1288 | { 1289 | countryCode: "NP", 1290 | isDST: false, 1291 | name: "Nepal Time", 1292 | offset: 20700, 1293 | offsetHHMM: "+05:45", 1294 | }, 1295 | }, 1296 | "KRAST": []*TzAbbreviationInfo{ 1297 | { 1298 | countryCode: "RU", 1299 | isDST: true, 1300 | name: "Krasnoyarsk Summer Time", 1301 | offset: 28800, 1302 | offsetHHMM: "+08:00", 1303 | }, 1304 | }, 1305 | "MYT": []*TzAbbreviationInfo{ 1306 | { 1307 | countryCode: "MY", 1308 | isDST: false, 1309 | name: "Malaysia Time", 1310 | offset: 28800, 1311 | offsetHHMM: "+08:00", 1312 | }, 1313 | }, 1314 | "MLAST": []*TzAbbreviationInfo{ 1315 | { 1316 | countryCode: "MY", 1317 | isDST: true, 1318 | name: "Malaya Summer Time", 1319 | offset: 26400, 1320 | offsetHHMM: "+07:20", 1321 | }, 1322 | }, 1323 | "BORTST": []*TzAbbreviationInfo{ 1324 | { 1325 | countryCode: "MY", 1326 | isDST: true, 1327 | name: "Borneo Summer Time", 1328 | offset: 30000, 1329 | offsetHHMM: "+08:20", 1330 | }, 1331 | }, 1332 | "MAGT": []*TzAbbreviationInfo{ 1333 | { 1334 | countryCode: "RU", 1335 | isDST: false, 1336 | name: "Magadan Time/Magadan Standard Time", 1337 | offset: 39600, 1338 | offsetHHMM: "+11:00", 1339 | }, 1340 | }, 1341 | "MAGST": []*TzAbbreviationInfo{ 1342 | { 1343 | countryCode: "RU", 1344 | isDST: true, 1345 | name: "Magadan Summer Time", 1346 | offset: 43200, 1347 | offsetHHMM: "+12:00", 1348 | }, 1349 | }, 1350 | "WITA": []*TzAbbreviationInfo{ 1351 | { 1352 | countryCode: "ID", 1353 | isDST: false, 1354 | name: "Central Indonesia Time", 1355 | offset: 28800, 1356 | offsetHHMM: "+08:00", 1357 | }, 1358 | }, 1359 | "PHT": []*TzAbbreviationInfo{ 1360 | { 1361 | countryCode: "PH", 1362 | isDST: false, 1363 | name: "Philippine Time/Philippine Standard Time", 1364 | offset: 28800, 1365 | offsetHHMM: "+08:00", 1366 | }, 1367 | }, 1368 | "PHST": []*TzAbbreviationInfo{ 1369 | { 1370 | countryCode: "PH", 1371 | isDST: true, 1372 | name: "Philippine Summer Time", 1373 | offset: 32400, 1374 | offsetHHMM: "+09:00", 1375 | }, 1376 | }, 1377 | "NOVT": []*TzAbbreviationInfo{ 1378 | { 1379 | countryCode: "RU", 1380 | isDST: false, 1381 | name: "Novosibirsk Time/Novosibirsk Standard Time", 1382 | offset: 25200, 1383 | offsetHHMM: "+07:00", 1384 | }, 1385 | }, 1386 | "OMST": []*TzAbbreviationInfo{ 1387 | { 1388 | countryCode: "RU", 1389 | isDST: false, 1390 | name: "Omsk Time/Omsk Standard Time", 1391 | offset: 21600, 1392 | offsetHHMM: "+06:00", 1393 | }, 1394 | }, 1395 | "OMSST": []*TzAbbreviationInfo{ 1396 | { 1397 | countryCode: "RU", 1398 | isDST: true, 1399 | name: "Omsk Summer Time", 1400 | offset: 25200, 1401 | offsetHHMM: "+07:00", 1402 | }, 1403 | }, 1404 | "ORAT": []*TzAbbreviationInfo{ 1405 | { 1406 | countryCode: "KZ", 1407 | isDST: false, 1408 | name: "Oral Time", 1409 | offset: 18000, 1410 | offsetHHMM: "+05:00", 1411 | }, 1412 | }, 1413 | "KT": []*TzAbbreviationInfo{ 1414 | { 1415 | countryCode: "KP", 1416 | isDST: false, 1417 | name: "Korean Time", 1418 | offset: 32400, 1419 | offsetHHMM: "+09:00", 1420 | }, 1421 | }, 1422 | "KST": []*TzAbbreviationInfo{ 1423 | { 1424 | countryCode: "KP", 1425 | isDST: false, 1426 | name: "Korean Standard Time", 1427 | offset: 32400, 1428 | offsetHHMM: "+09:00", 1429 | }, 1430 | }, 1431 | "QYZT": []*TzAbbreviationInfo{ 1432 | { 1433 | countryCode: "KZ", 1434 | isDST: false, 1435 | name: "Qyzylorda Time/Qyzylorda Standard Time", 1436 | offset: 18000, 1437 | offsetHHMM: "+05:00", 1438 | }, 1439 | }, 1440 | "QYZST": []*TzAbbreviationInfo{ 1441 | { 1442 | countryCode: "KZ", 1443 | isDST: true, 1444 | name: "Qyzylorda Summer Time", 1445 | offset: 21600, 1446 | offsetHHMM: "+06:00", 1447 | }, 1448 | }, 1449 | "MMT": []*TzAbbreviationInfo{ 1450 | { 1451 | countryCode: "MM", 1452 | isDST: false, 1453 | name: "Myanmar Time", 1454 | offset: 23400, 1455 | offsetHHMM: "+06:30", 1456 | }, 1457 | }, 1458 | "SAKT": []*TzAbbreviationInfo{ 1459 | { 1460 | countryCode: "RU", 1461 | isDST: false, 1462 | name: "Sakhalin Time/Sakhalin Standard Time", 1463 | offset: 39600, 1464 | offsetHHMM: "+11:00", 1465 | }, 1466 | }, 1467 | "UZT": []*TzAbbreviationInfo{ 1468 | { 1469 | countryCode: "UZ", 1470 | isDST: false, 1471 | name: "Uzbekistan Time/Uzbekistan Standard Time", 1472 | offset: 18000, 1473 | offsetHHMM: "+05:00", 1474 | }, 1475 | }, 1476 | "UZST": []*TzAbbreviationInfo{ 1477 | { 1478 | countryCode: "UZ", 1479 | isDST: true, 1480 | name: "Uzbekistan Summer Time", 1481 | offset: 21600, 1482 | offsetHHMM: "+06:00", 1483 | }, 1484 | }, 1485 | "KDT": []*TzAbbreviationInfo{ 1486 | { 1487 | countryCode: "KR", 1488 | isDST: true, 1489 | name: "Korean Daylight Time", 1490 | offset: 36000, 1491 | offsetHHMM: "+10:00", 1492 | }, 1493 | }, 1494 | "SGT": []*TzAbbreviationInfo{ 1495 | { 1496 | countryCode: "SG", 1497 | isDST: false, 1498 | name: "Singapore Standard Time", 1499 | offset: 28800, 1500 | offsetHHMM: "+08:00", 1501 | }, 1502 | }, 1503 | "MALST": []*TzAbbreviationInfo{ 1504 | { 1505 | countryCode: "SG", 1506 | isDST: true, 1507 | name: "Malaya Summer Time", 1508 | offset: 26400, 1509 | offsetHHMM: "+07:20", 1510 | }, 1511 | }, 1512 | "SRET": []*TzAbbreviationInfo{ 1513 | { 1514 | countryCode: "RU", 1515 | isDST: false, 1516 | name: "Srednekolymsk Time", 1517 | offset: 39600, 1518 | offsetHHMM: "+11:00", 1519 | }, 1520 | }, 1521 | "GET": []*TzAbbreviationInfo{ 1522 | { 1523 | countryCode: "GE", 1524 | isDST: false, 1525 | name: "Georgia Time/Georgia Standard Time", 1526 | offset: 14400, 1527 | offsetHHMM: "+04:00", 1528 | }, 1529 | }, 1530 | "IRST": []*TzAbbreviationInfo{ 1531 | { 1532 | countryCode: "IR", 1533 | isDST: false, 1534 | name: "Iran Time/Iran Standard Time", 1535 | offset: 12600, 1536 | offsetHHMM: "+03:30", 1537 | }, 1538 | }, 1539 | "IRDT": []*TzAbbreviationInfo{ 1540 | { 1541 | countryCode: "IR", 1542 | isDST: true, 1543 | name: "Iran Daylight Time", 1544 | offset: 16200, 1545 | offsetHHMM: "+04:30", 1546 | }, 1547 | }, 1548 | "BTT": []*TzAbbreviationInfo{ 1549 | { 1550 | countryCode: "BT", 1551 | isDST: false, 1552 | name: "Bhutan Time", 1553 | offset: 21600, 1554 | offsetHHMM: "+06:00", 1555 | }, 1556 | }, 1557 | "JST": []*TzAbbreviationInfo{ 1558 | { 1559 | countryCode: "JP", 1560 | isDST: false, 1561 | name: "Japan Time/Japan Standard Time", 1562 | offset: 32400, 1563 | offsetHHMM: "+09:00", 1564 | }, 1565 | }, 1566 | "JDT": []*TzAbbreviationInfo{ 1567 | { 1568 | countryCode: "JP", 1569 | isDST: true, 1570 | name: "Japan Daylight Time", 1571 | offset: 39600, 1572 | offsetHHMM: "+11:00", 1573 | }, 1574 | }, 1575 | "ULAT": []*TzAbbreviationInfo{ 1576 | { 1577 | countryCode: "MN", 1578 | isDST: false, 1579 | name: "Ulaanbaatar Time/Ulaanbaatar Standard Time", 1580 | offset: 28800, 1581 | offsetHHMM: "+08:00", 1582 | }, 1583 | }, 1584 | "ULAST": []*TzAbbreviationInfo{ 1585 | { 1586 | countryCode: "MN", 1587 | isDST: true, 1588 | name: "Ulaanbaatar Summer Time", 1589 | offset: 32400, 1590 | offsetHHMM: "+09:00", 1591 | }, 1592 | }, 1593 | "VLAT": []*TzAbbreviationInfo{ 1594 | { 1595 | countryCode: "RU", 1596 | isDST: false, 1597 | name: "Vladivostok Time/Vladivostok Standard Time", 1598 | offset: 36000, 1599 | offsetHHMM: "+10:00", 1600 | }, 1601 | }, 1602 | "VLAST": []*TzAbbreviationInfo{ 1603 | { 1604 | countryCode: "RU", 1605 | isDST: true, 1606 | name: "Vladivostok Summer Time", 1607 | offset: 43200, 1608 | offsetHHMM: "+12:00", 1609 | }, 1610 | }, 1611 | "YEKT": []*TzAbbreviationInfo{ 1612 | { 1613 | countryCode: "RU", 1614 | isDST: false, 1615 | name: "Yekaterinburg Time/Yekaterinburg Standard Time", 1616 | offset: 18000, 1617 | offsetHHMM: "+05:00", 1618 | }, 1619 | }, 1620 | "YEKST": []*TzAbbreviationInfo{ 1621 | { 1622 | countryCode: "RU", 1623 | isDST: true, 1624 | name: "Yekaterinburg Summer Time", 1625 | offset: 21600, 1626 | offsetHHMM: "+06:00", 1627 | }, 1628 | }, 1629 | "AZOT": []*TzAbbreviationInfo{ 1630 | { 1631 | countryCode: "PT", 1632 | isDST: false, 1633 | name: "Azores Time/Azores Standard Time", 1634 | offset: -3600, 1635 | offsetHHMM: "-01:00", 1636 | }, 1637 | }, 1638 | "AZOST": []*TzAbbreviationInfo{ 1639 | { 1640 | countryCode: "PT", 1641 | isDST: true, 1642 | name: "Azores Summer Time", 1643 | offset: 0, 1644 | offsetHHMM: "+00:00", 1645 | }, 1646 | }, 1647 | "CVT": []*TzAbbreviationInfo{ 1648 | { 1649 | countryCode: "CV", 1650 | isDST: false, 1651 | name: "Cape Verde Time/Cape Verde Standard Time", 1652 | offset: -3600, 1653 | offsetHHMM: "-01:00", 1654 | }, 1655 | }, 1656 | "FKT": []*TzAbbreviationInfo{ 1657 | { 1658 | countryCode: "FK", 1659 | isDST: false, 1660 | name: "Falkland Islands Time/Falkland Islands Standard Time", 1661 | offset: -10800, 1662 | offsetHHMM: "-03:00", 1663 | }, 1664 | }, 1665 | "AET": []*TzAbbreviationInfo{ 1666 | { 1667 | countryCode: "AU", 1668 | isDST: false, 1669 | name: "Eastern Australia Time", 1670 | offset: 36000, 1671 | offsetHHMM: "+10:00", 1672 | }, 1673 | }, 1674 | "AEST": []*TzAbbreviationInfo{ 1675 | { 1676 | countryCode: "AU", 1677 | isDST: false, 1678 | name: "Australian Eastern Standard Time", 1679 | offset: 36000, 1680 | offsetHHMM: "+10:00", 1681 | }, 1682 | }, 1683 | "AEDT": []*TzAbbreviationInfo{ 1684 | { 1685 | countryCode: "AU", 1686 | isDST: true, 1687 | name: "Australian Eastern Daylight Time", 1688 | offset: 39600, 1689 | offsetHHMM: "+11:00", 1690 | }, 1691 | }, 1692 | "ACDT": []*TzAbbreviationInfo{ 1693 | { 1694 | countryCode: "AU", 1695 | isDST: true, 1696 | name: "Australian Central Daylight Time", 1697 | offset: 37800, 1698 | offsetHHMM: "+10:30", 1699 | }, 1700 | }, 1701 | "ACWT": []*TzAbbreviationInfo{ 1702 | { 1703 | countryCode: "AU", 1704 | isDST: false, 1705 | name: "Australian Central Western Time", 1706 | offset: 31500, 1707 | offsetHHMM: "+08:45", 1708 | }, 1709 | }, 1710 | "ACWST": []*TzAbbreviationInfo{ 1711 | { 1712 | countryCode: "AU", 1713 | isDST: false, 1714 | name: "Australian Central Western Standard Time", 1715 | offset: 31500, 1716 | offsetHHMM: "+08:45", 1717 | }, 1718 | }, 1719 | "ACWDT": []*TzAbbreviationInfo{ 1720 | { 1721 | countryCode: "AU", 1722 | isDST: true, 1723 | name: "Australian Central Western Daylight Time", 1724 | offset: 35100, 1725 | offsetHHMM: "+09:45", 1726 | }, 1727 | }, 1728 | "LHT": []*TzAbbreviationInfo{ 1729 | { 1730 | countryCode: "AU", 1731 | isDST: false, 1732 | name: "Lord Howe Time", 1733 | offset: 37800, 1734 | offsetHHMM: "+10:30", 1735 | }, 1736 | }, 1737 | "LHST": []*TzAbbreviationInfo{ 1738 | { 1739 | countryCode: "AU", 1740 | isDST: false, 1741 | name: "Lord Howe Standard Time", 1742 | offset: 37800, 1743 | offsetHHMM: "+10:30", 1744 | }, 1745 | }, 1746 | "LHDT": []*TzAbbreviationInfo{ 1747 | { 1748 | countryCode: "AU", 1749 | isDST: true, 1750 | name: "Lord Howe Daylight Time", 1751 | offset: 39600, 1752 | offsetHHMM: "+11:00", 1753 | }, 1754 | }, 1755 | "AWDT": []*TzAbbreviationInfo{ 1756 | { 1757 | countryCode: "AU", 1758 | isDST: true, 1759 | name: "Australian Western Daylight Time", 1760 | offset: 32400, 1761 | offsetHHMM: "+09:00", 1762 | }, 1763 | }, 1764 | "EAST": []*TzAbbreviationInfo{ 1765 | { 1766 | countryCode: "CL", 1767 | isDST: false, 1768 | name: "Easter Island Time/Easter Island Standard Time", 1769 | offset: -21600, 1770 | offsetHHMM: "-06:00", 1771 | }, 1772 | }, 1773 | "EASST": []*TzAbbreviationInfo{ 1774 | { 1775 | countryCode: "CL", 1776 | isDST: true, 1777 | name: "Easter Island Summer Time", 1778 | offset: -18000, 1779 | offsetHHMM: "-05:00", 1780 | }, 1781 | }, 1782 | "GMT-1": []*TzAbbreviationInfo{ 1783 | { 1784 | countryCode: "", 1785 | isDST: false, 1786 | name: "Greenwich Mean Time -1", 1787 | offset: -3600, 1788 | offsetHHMM: "-01:00", 1789 | }, 1790 | }, 1791 | "GMT-10": []*TzAbbreviationInfo{ 1792 | { 1793 | countryCode: "", 1794 | isDST: false, 1795 | name: "Greenwich Mean Time -10", 1796 | offset: -36000, 1797 | offsetHHMM: "-10:00", 1798 | }, 1799 | }, 1800 | "GMT-11": []*TzAbbreviationInfo{ 1801 | { 1802 | countryCode: "", 1803 | isDST: false, 1804 | name: "Greenwich Mean Time -11", 1805 | offset: -39600, 1806 | offsetHHMM: "-11:00", 1807 | }, 1808 | }, 1809 | "GMT-12": []*TzAbbreviationInfo{ 1810 | { 1811 | countryCode: "", 1812 | isDST: false, 1813 | name: "Greenwich Mean Time -12", 1814 | offset: -43200, 1815 | offsetHHMM: "-12:00", 1816 | }, 1817 | }, 1818 | "GMT-2": []*TzAbbreviationInfo{ 1819 | { 1820 | countryCode: "", 1821 | isDST: false, 1822 | name: "Greenwich Mean Time -2", 1823 | offset: -7200, 1824 | offsetHHMM: "-02:00", 1825 | }, 1826 | }, 1827 | "GMT-3": []*TzAbbreviationInfo{ 1828 | { 1829 | countryCode: "", 1830 | isDST: false, 1831 | name: "Greenwich Mean Time -3", 1832 | offset: -10800, 1833 | offsetHHMM: "-03:00", 1834 | }, 1835 | }, 1836 | "GMT-4": []*TzAbbreviationInfo{ 1837 | { 1838 | countryCode: "", 1839 | isDST: false, 1840 | name: "Greenwich Mean Time -4", 1841 | offset: -14400, 1842 | offsetHHMM: "-04:00", 1843 | }, 1844 | }, 1845 | "GMT-5": []*TzAbbreviationInfo{ 1846 | { 1847 | countryCode: "", 1848 | isDST: false, 1849 | name: "Greenwich Mean Time -5", 1850 | offset: -18000, 1851 | offsetHHMM: "-05:00", 1852 | }, 1853 | }, 1854 | "GMT-6": []*TzAbbreviationInfo{ 1855 | { 1856 | countryCode: "", 1857 | isDST: false, 1858 | name: "Greenwich Mean Time -6", 1859 | offset: -21600, 1860 | offsetHHMM: "-06:00", 1861 | }, 1862 | }, 1863 | "GMT-7": []*TzAbbreviationInfo{ 1864 | { 1865 | countryCode: "", 1866 | isDST: false, 1867 | name: "Greenwich Mean Time -7", 1868 | offset: -25200, 1869 | offsetHHMM: "-07:00", 1870 | }, 1871 | }, 1872 | "GMT-8": []*TzAbbreviationInfo{ 1873 | { 1874 | countryCode: "", 1875 | isDST: false, 1876 | name: "Greenwich Mean Time -8", 1877 | offset: -28800, 1878 | offsetHHMM: "-08:00", 1879 | }, 1880 | }, 1881 | "GMT-9": []*TzAbbreviationInfo{ 1882 | { 1883 | countryCode: "", 1884 | isDST: false, 1885 | name: "Greenwich Mean Time -9", 1886 | offset: -32400, 1887 | offsetHHMM: "-09:00", 1888 | }, 1889 | }, 1890 | "GMT+1": []*TzAbbreviationInfo{ 1891 | { 1892 | countryCode: "", 1893 | isDST: false, 1894 | name: "Greenwich Mean Time +1", 1895 | offset: 3600, 1896 | offsetHHMM: "+01:00", 1897 | }, 1898 | }, 1899 | "GMT+10": []*TzAbbreviationInfo{ 1900 | { 1901 | countryCode: "", 1902 | isDST: false, 1903 | name: "Greenwich Mean Time +10", 1904 | offset: 36000, 1905 | offsetHHMM: "+10:00", 1906 | }, 1907 | }, 1908 | "GMT+11": []*TzAbbreviationInfo{ 1909 | { 1910 | countryCode: "", 1911 | isDST: false, 1912 | name: "Greenwich Mean Time +11", 1913 | offset: 39600, 1914 | offsetHHMM: "+11:00", 1915 | }, 1916 | }, 1917 | "GMT+12": []*TzAbbreviationInfo{ 1918 | { 1919 | countryCode: "", 1920 | isDST: false, 1921 | name: "Greenwich Mean Time +12", 1922 | offset: 43200, 1923 | offsetHHMM: "+12:00", 1924 | }, 1925 | }, 1926 | "GMT+13": []*TzAbbreviationInfo{ 1927 | { 1928 | countryCode: "", 1929 | isDST: false, 1930 | name: "Greenwich Mean Time +13", 1931 | offset: 46800, 1932 | offsetHHMM: "+13:00", 1933 | }, 1934 | }, 1935 | "GMT+14": []*TzAbbreviationInfo{ 1936 | { 1937 | countryCode: "", 1938 | isDST: false, 1939 | name: "Greenwich Mean Time +14", 1940 | offset: 50400, 1941 | offsetHHMM: "+14:00", 1942 | }, 1943 | }, 1944 | "GMT+2": []*TzAbbreviationInfo{ 1945 | { 1946 | countryCode: "", 1947 | isDST: false, 1948 | name: "Greenwich Mean Time +2", 1949 | offset: 7200, 1950 | offsetHHMM: "+02:00", 1951 | }, 1952 | }, 1953 | "GMT+3": []*TzAbbreviationInfo{ 1954 | { 1955 | countryCode: "", 1956 | isDST: false, 1957 | name: "Greenwich Mean Time +3", 1958 | offset: 10800, 1959 | offsetHHMM: "+03:00", 1960 | }, 1961 | }, 1962 | "GMT+4": []*TzAbbreviationInfo{ 1963 | { 1964 | countryCode: "", 1965 | isDST: false, 1966 | name: "Greenwich Mean Time +4", 1967 | offset: 14400, 1968 | offsetHHMM: "+04:00", 1969 | }, 1970 | }, 1971 | "GMT+5": []*TzAbbreviationInfo{ 1972 | { 1973 | countryCode: "", 1974 | isDST: false, 1975 | name: "Greenwich Mean Time +5", 1976 | offset: 18000, 1977 | offsetHHMM: "+05:00", 1978 | }, 1979 | }, 1980 | "GMT+6": []*TzAbbreviationInfo{ 1981 | { 1982 | countryCode: "", 1983 | isDST: false, 1984 | name: "Greenwich Mean Time +6", 1985 | offset: 21600, 1986 | offsetHHMM: "+06:00", 1987 | }, 1988 | }, 1989 | "GMT+7": []*TzAbbreviationInfo{ 1990 | { 1991 | countryCode: "", 1992 | isDST: false, 1993 | name: "Greenwich Mean Time +7", 1994 | offset: 25200, 1995 | offsetHHMM: "+07:00", 1996 | }, 1997 | }, 1998 | "GMT+8": []*TzAbbreviationInfo{ 1999 | { 2000 | countryCode: "", 2001 | isDST: false, 2002 | name: "Greenwich Mean Time +8", 2003 | offset: 28800, 2004 | offsetHHMM: "+08:00", 2005 | }, 2006 | }, 2007 | "GMT+9": []*TzAbbreviationInfo{ 2008 | { 2009 | countryCode: "", 2010 | isDST: false, 2011 | name: "Greenwich Mean Time +9", 2012 | offset: 32400, 2013 | offsetHHMM: "+09:00", 2014 | }, 2015 | }, 2016 | "UTC": []*TzAbbreviationInfo{ 2017 | { 2018 | countryCode: "", 2019 | isDST: false, 2020 | name: "Coordinated Universal Time", 2021 | offset: 0, 2022 | offsetHHMM: "+00:00", 2023 | }, 2024 | }, 2025 | "SAMT": []*TzAbbreviationInfo{ 2026 | { 2027 | countryCode: "RU", 2028 | isDST: false, 2029 | name: "Samara Time/Samara Standard Time", 2030 | offset: 14400, 2031 | offsetHHMM: "+04:00", 2032 | }, 2033 | { 2034 | countryCode: "RU", 2035 | isDST: false, 2036 | name: "Samara Standard Time", 2037 | offset: 14400, 2038 | offsetHHMM: "+04:00", 2039 | }, 2040 | }, 2041 | "MSK": []*TzAbbreviationInfo{ 2042 | { 2043 | countryCode: "RU", 2044 | isDST: false, 2045 | name: "Moscow Time/Moscow Standard Time", 2046 | offset: 10800, 2047 | offsetHHMM: "+03:00", 2048 | }, 2049 | }, 2050 | "MSD": []*TzAbbreviationInfo{ 2051 | { 2052 | countryCode: "RU", 2053 | isDST: true, 2054 | name: "Moscow Summer Time", 2055 | offset: 14400, 2056 | offsetHHMM: "+04:00", 2057 | }, 2058 | }, 2059 | "GMT+04:00": []*TzAbbreviationInfo{ 2060 | { 2061 | countryCode: "RU", 2062 | isDST: false, 2063 | name: "Saratov Standard Time", 2064 | offset: 14400, 2065 | offsetHHMM: "+04:00", 2066 | }, 2067 | }, 2068 | "VOLT": []*TzAbbreviationInfo{ 2069 | { 2070 | countryCode: "RU", 2071 | isDST: false, 2072 | name: "Volgograd Time/Volgograd Standard Time", 2073 | offset: 14400, 2074 | offsetHHMM: "+04:00", 2075 | }, 2076 | }, 2077 | "-00": []*TzAbbreviationInfo{ 2078 | { 2079 | countryCode: "GB", 2080 | isDST: false, 2081 | name: "Undefined", 2082 | offset: 0, 2083 | offsetHHMM: "+00:00", 2084 | }, 2085 | }, 2086 | "IOT": []*TzAbbreviationInfo{ 2087 | { 2088 | countryCode: "IO", 2089 | isDST: false, 2090 | name: "Indian Ocean Time", 2091 | offset: 21600, 2092 | offsetHHMM: "+06:00", 2093 | }, 2094 | }, 2095 | "CXT": []*TzAbbreviationInfo{ 2096 | { 2097 | countryCode: "CX", 2098 | isDST: false, 2099 | name: "Christmas Island Time", 2100 | offset: 25200, 2101 | offsetHHMM: "+07:00", 2102 | }, 2103 | }, 2104 | "CCT": []*TzAbbreviationInfo{ 2105 | { 2106 | countryCode: "CC", 2107 | isDST: false, 2108 | name: "Cocos Islands Time", 2109 | offset: 23400, 2110 | offsetHHMM: "+06:30", 2111 | }, 2112 | }, 2113 | "TFT": []*TzAbbreviationInfo{ 2114 | { 2115 | countryCode: "TF", 2116 | isDST: false, 2117 | name: "French Southern & Antarctic Time", 2118 | offset: 18000, 2119 | offsetHHMM: "+05:00", 2120 | }, 2121 | }, 2122 | "SCT": []*TzAbbreviationInfo{ 2123 | { 2124 | countryCode: "SC", 2125 | isDST: false, 2126 | name: "Seychelles Time", 2127 | offset: 14400, 2128 | offsetHHMM: "+04:00", 2129 | }, 2130 | }, 2131 | "MVT": []*TzAbbreviationInfo{ 2132 | { 2133 | countryCode: "MV", 2134 | isDST: false, 2135 | name: "Maldives Time", 2136 | offset: 18000, 2137 | offsetHHMM: "+05:00", 2138 | }, 2139 | }, 2140 | "MUT": []*TzAbbreviationInfo{ 2141 | { 2142 | countryCode: "MU", 2143 | isDST: false, 2144 | name: "Mauritius Time/Mauritius Standard Time", 2145 | offset: 14400, 2146 | offsetHHMM: "+04:00", 2147 | }, 2148 | }, 2149 | "MUST": []*TzAbbreviationInfo{ 2150 | { 2151 | countryCode: "MU", 2152 | isDST: true, 2153 | name: "Mauritius Summer Time", 2154 | offset: 18000, 2155 | offsetHHMM: "+05:00", 2156 | }, 2157 | }, 2158 | "RET": []*TzAbbreviationInfo{ 2159 | { 2160 | countryCode: "RE", 2161 | isDST: false, 2162 | name: "Réunion Time", 2163 | offset: 14400, 2164 | offsetHHMM: "+04:00", 2165 | }, 2166 | }, 2167 | "IRT": []*TzAbbreviationInfo{ 2168 | { 2169 | countryCode: "IR", 2170 | isDST: false, 2171 | name: "Iran Time", 2172 | offset: 12600, 2173 | offsetHHMM: "+03:30", 2174 | }, 2175 | }, 2176 | "MHT": []*TzAbbreviationInfo{ 2177 | { 2178 | countryCode: "MH", 2179 | isDST: false, 2180 | name: "Marshall Islands Time", 2181 | offset: 43200, 2182 | offsetHHMM: "+12:00", 2183 | }, 2184 | }, 2185 | "MET": []*TzAbbreviationInfo{ 2186 | { 2187 | countryCode: "", 2188 | isDST: false, 2189 | name: "Middle European Time", 2190 | offset: 3600, 2191 | offsetHHMM: "+01:00", 2192 | }, 2193 | }, 2194 | "MEST": []*TzAbbreviationInfo{ 2195 | { 2196 | countryCode: "", 2197 | isDST: true, 2198 | name: "Middle European Summer Time", 2199 | offset: 7200, 2200 | offsetHHMM: "+02:00", 2201 | }, 2202 | }, 2203 | "CHAT": []*TzAbbreviationInfo{ 2204 | { 2205 | countryCode: "NZ", 2206 | isDST: false, 2207 | name: "Chatham Time", 2208 | offset: 45900, 2209 | offsetHHMM: "+12:45", 2210 | }, 2211 | }, 2212 | "CHAST": []*TzAbbreviationInfo{ 2213 | { 2214 | countryCode: "NZ", 2215 | isDST: false, 2216 | name: "Chatham Standard Time", 2217 | offset: 45900, 2218 | offsetHHMM: "+12:45", 2219 | }, 2220 | }, 2221 | "CHADT": []*TzAbbreviationInfo{ 2222 | { 2223 | countryCode: "NZ", 2224 | isDST: true, 2225 | name: "Chatham Daylight Time", 2226 | offset: 49500, 2227 | offsetHHMM: "+13:45", 2228 | }, 2229 | }, 2230 | "WST": []*TzAbbreviationInfo{ 2231 | { 2232 | countryCode: "WS", 2233 | isDST: false, 2234 | name: "Apia Time/Apia Standard Time", 2235 | offset: 46800, 2236 | offsetHHMM: "+13:00", 2237 | }, 2238 | }, 2239 | "WSDT": []*TzAbbreviationInfo{ 2240 | { 2241 | countryCode: "WS", 2242 | isDST: true, 2243 | name: "Apia Daylight Time", 2244 | offset: 50400, 2245 | offsetHHMM: "+14:00", 2246 | }, 2247 | }, 2248 | "CHUT": []*TzAbbreviationInfo{ 2249 | { 2250 | countryCode: "FM", 2251 | isDST: false, 2252 | name: "Chuuk Time", 2253 | offset: 36000, 2254 | offsetHHMM: "+10:00", 2255 | }, 2256 | }, 2257 | "VUT": []*TzAbbreviationInfo{ 2258 | { 2259 | countryCode: "VU", 2260 | isDST: false, 2261 | name: "Vanuatu Time/Vanuatu Standard Time", 2262 | offset: 39600, 2263 | offsetHHMM: "+11:00", 2264 | }, 2265 | }, 2266 | "VUST": []*TzAbbreviationInfo{ 2267 | { 2268 | countryCode: "VU", 2269 | isDST: true, 2270 | name: "Vanuatu Summer Time", 2271 | offset: 43200, 2272 | offsetHHMM: "+12:00", 2273 | }, 2274 | }, 2275 | "PHOT": []*TzAbbreviationInfo{ 2276 | { 2277 | countryCode: "KI", 2278 | isDST: false, 2279 | name: "Phoenix Islands Time", 2280 | offset: 46800, 2281 | offsetHHMM: "+13:00", 2282 | }, 2283 | }, 2284 | "TKT": []*TzAbbreviationInfo{ 2285 | { 2286 | countryCode: "TK", 2287 | isDST: false, 2288 | name: "Tokelau Time", 2289 | offset: 46800, 2290 | offsetHHMM: "+13:00", 2291 | }, 2292 | }, 2293 | "FJT": []*TzAbbreviationInfo{ 2294 | { 2295 | countryCode: "FJ", 2296 | isDST: false, 2297 | name: "Fiji Time/Fiji Standard Time", 2298 | offset: 43200, 2299 | offsetHHMM: "+12:00", 2300 | }, 2301 | }, 2302 | "FJST": []*TzAbbreviationInfo{ 2303 | { 2304 | countryCode: "FJ", 2305 | isDST: true, 2306 | name: "Fiji Summer Time", 2307 | offset: 46800, 2308 | offsetHHMM: "+13:00", 2309 | }, 2310 | }, 2311 | "TVT": []*TzAbbreviationInfo{ 2312 | { 2313 | countryCode: "TV", 2314 | isDST: false, 2315 | name: "Tuvalu Time", 2316 | offset: 43200, 2317 | offsetHHMM: "+12:00", 2318 | }, 2319 | }, 2320 | "GALT": []*TzAbbreviationInfo{ 2321 | { 2322 | countryCode: "EC", 2323 | isDST: false, 2324 | name: "Galapagos Time", 2325 | offset: -21600, 2326 | offsetHHMM: "-06:00", 2327 | }, 2328 | }, 2329 | "GAMT": []*TzAbbreviationInfo{ 2330 | { 2331 | countryCode: "PF", 2332 | isDST: false, 2333 | name: "Gambier Time", 2334 | offset: -32400, 2335 | offsetHHMM: "-09:00", 2336 | }, 2337 | }, 2338 | "SBT": []*TzAbbreviationInfo{ 2339 | { 2340 | countryCode: "SB", 2341 | isDST: false, 2342 | name: "Solomon Islands Time", 2343 | offset: 39600, 2344 | offsetHHMM: "+11:00", 2345 | }, 2346 | }, 2347 | "ChST": []*TzAbbreviationInfo{ 2348 | { 2349 | countryCode: "GU", 2350 | isDST: false, 2351 | name: "Chamorro Standard Time", 2352 | offset: 36000, 2353 | offsetHHMM: "+10:00", 2354 | }, 2355 | }, 2356 | "GDT": []*TzAbbreviationInfo{ 2357 | { 2358 | countryCode: "GU", 2359 | isDST: true, 2360 | name: "Guam Daylight Time", 2361 | offset: 39600, 2362 | offsetHHMM: "+11:00", 2363 | }, 2364 | }, 2365 | "LINT": []*TzAbbreviationInfo{ 2366 | { 2367 | countryCode: "KI", 2368 | isDST: false, 2369 | name: "Line Islands Time", 2370 | offset: 50400, 2371 | offsetHHMM: "+14:00", 2372 | }, 2373 | }, 2374 | "KOST": []*TzAbbreviationInfo{ 2375 | { 2376 | countryCode: "FM", 2377 | isDST: false, 2378 | name: "Kosrae Time", 2379 | offset: 39600, 2380 | offsetHHMM: "+11:00", 2381 | }, 2382 | }, 2383 | "MART": []*TzAbbreviationInfo{ 2384 | { 2385 | countryCode: "PF", 2386 | isDST: false, 2387 | name: "Marquesas Time", 2388 | offset: -34200, 2389 | offsetHHMM: "-09:30", 2390 | }, 2391 | }, 2392 | "SST": []*TzAbbreviationInfo{ 2393 | { 2394 | countryCode: "UM", 2395 | isDST: false, 2396 | name: "Samoa Time/Samoa Standard Time", 2397 | offset: -39600, 2398 | offsetHHMM: "-11:00", 2399 | }, 2400 | }, 2401 | "NRT": []*TzAbbreviationInfo{ 2402 | { 2403 | countryCode: "NR", 2404 | isDST: false, 2405 | name: "Nauru Time", 2406 | offset: 43200, 2407 | offsetHHMM: "+12:00", 2408 | }, 2409 | }, 2410 | "NUT": []*TzAbbreviationInfo{ 2411 | { 2412 | countryCode: "NU", 2413 | isDST: false, 2414 | name: "Niue Time", 2415 | offset: -39600, 2416 | offsetHHMM: "-11:00", 2417 | }, 2418 | }, 2419 | "NFT": []*TzAbbreviationInfo{ 2420 | { 2421 | countryCode: "NF", 2422 | isDST: false, 2423 | name: "Norfolk Island Time/Norfolk Island Standard Time", 2424 | offset: 39600, 2425 | offsetHHMM: "+11:00", 2426 | }, 2427 | }, 2428 | "NFDT": []*TzAbbreviationInfo{ 2429 | { 2430 | countryCode: "NF", 2431 | isDST: true, 2432 | name: "Norfolk Island Daylight Time", 2433 | offset: 43200, 2434 | offsetHHMM: "+12:00", 2435 | }, 2436 | }, 2437 | "NCT": []*TzAbbreviationInfo{ 2438 | { 2439 | countryCode: "NC", 2440 | isDST: false, 2441 | name: "New Caledonia Time/New Caledonia Standard Time", 2442 | offset: 39600, 2443 | offsetHHMM: "+11:00", 2444 | }, 2445 | }, 2446 | "NCST": []*TzAbbreviationInfo{ 2447 | { 2448 | countryCode: "NC", 2449 | isDST: true, 2450 | name: "New Caledonia Summer Time", 2451 | offset: 43200, 2452 | offsetHHMM: "+12:00", 2453 | }, 2454 | }, 2455 | "PWT": []*TzAbbreviationInfo{ 2456 | { 2457 | countryCode: "PW", 2458 | isDST: false, 2459 | name: "Palau Time", 2460 | offset: 32400, 2461 | offsetHHMM: "+09:00", 2462 | }, 2463 | }, 2464 | "PONT": []*TzAbbreviationInfo{ 2465 | { 2466 | countryCode: "FM", 2467 | isDST: false, 2468 | name: "Ponape Time", 2469 | offset: 39600, 2470 | offsetHHMM: "+11:00", 2471 | }, 2472 | }, 2473 | "PGT": []*TzAbbreviationInfo{ 2474 | { 2475 | countryCode: "PG", 2476 | isDST: false, 2477 | name: "Papua New Guinea Time", 2478 | offset: 36000, 2479 | offsetHHMM: "+10:00", 2480 | }, 2481 | }, 2482 | "CKT": []*TzAbbreviationInfo{ 2483 | { 2484 | countryCode: "CK", 2485 | isDST: false, 2486 | name: "Cook Islands Time/Cook Islands Standard Time", 2487 | offset: -36000, 2488 | offsetHHMM: "-10:00", 2489 | }, 2490 | }, 2491 | "CKHST": []*TzAbbreviationInfo{ 2492 | { 2493 | countryCode: "CK", 2494 | isDST: true, 2495 | name: "Cook Islands Half Summer Time", 2496 | offset: -34200, 2497 | offsetHHMM: "-09:30", 2498 | }, 2499 | }, 2500 | "TAHT": []*TzAbbreviationInfo{ 2501 | { 2502 | countryCode: "PF", 2503 | isDST: false, 2504 | name: "Tahiti Time", 2505 | offset: -36000, 2506 | offsetHHMM: "-10:00", 2507 | }, 2508 | }, 2509 | "GILT": []*TzAbbreviationInfo{ 2510 | { 2511 | countryCode: "KI", 2512 | isDST: false, 2513 | name: "Gilbert Islands Time", 2514 | offset: 43200, 2515 | offsetHHMM: "+12:00", 2516 | }, 2517 | }, 2518 | "TOT": []*TzAbbreviationInfo{ 2519 | { 2520 | countryCode: "TO", 2521 | isDST: false, 2522 | name: "Tonga Time/Tonga Standard Time", 2523 | offset: 46800, 2524 | offsetHHMM: "+13:00", 2525 | }, 2526 | }, 2527 | "TOST": []*TzAbbreviationInfo{ 2528 | { 2529 | countryCode: "TO", 2530 | isDST: true, 2531 | name: "Tonga Summer Time", 2532 | offset: 50400, 2533 | offsetHHMM: "+14:00", 2534 | }, 2535 | }, 2536 | "WAKT": []*TzAbbreviationInfo{ 2537 | { 2538 | countryCode: "UM", 2539 | isDST: false, 2540 | name: "Wake Island Time", 2541 | offset: 43200, 2542 | offsetHHMM: "+12:00", 2543 | }, 2544 | }, 2545 | "WFT": []*TzAbbreviationInfo{ 2546 | { 2547 | countryCode: "WF", 2548 | isDST: false, 2549 | name: "Wallis & Futuna Time", 2550 | offset: 43200, 2551 | offsetHHMM: "+12:00", 2552 | }, 2553 | }, 2554 | "GMT+3:30": []*TzAbbreviationInfo{ 2555 | { 2556 | countryCode: "", 2557 | isDST: false, 2558 | name: "Greenwich Mean Time +3:30", 2559 | offset: 12600, 2560 | offsetHHMM: "+03:30", 2561 | }, 2562 | }, 2563 | "GMT+4:30": []*TzAbbreviationInfo{ 2564 | { 2565 | countryCode: "", 2566 | isDST: false, 2567 | name: "Greenwich Mean Time +4:30", 2568 | offset: 16200, 2569 | offsetHHMM: "+04:30", 2570 | }, 2571 | }, 2572 | "GMT+5:45": []*TzAbbreviationInfo{ 2573 | { 2574 | countryCode: "", 2575 | isDST: false, 2576 | name: "Greenwich Mean Time +5:45", 2577 | offset: 20700, 2578 | offsetHHMM: "+05:45", 2579 | }, 2580 | }, 2581 | "GMT+6:30": []*TzAbbreviationInfo{ 2582 | { 2583 | countryCode: "", 2584 | isDST: false, 2585 | name: "Greenwich Mean Time +6:30", 2586 | offset: 23400, 2587 | offsetHHMM: "+06:30", 2588 | }, 2589 | }, 2590 | "GMT+8:45": []*TzAbbreviationInfo{ 2591 | { 2592 | countryCode: "", 2593 | isDST: false, 2594 | name: "Greenwich Mean Time +8:45", 2595 | offset: 31500, 2596 | offsetHHMM: "+08:45", 2597 | }, 2598 | }, 2599 | "GMT+9:30": []*TzAbbreviationInfo{ 2600 | { 2601 | countryCode: "", 2602 | isDST: false, 2603 | name: "Greenwich Mean Time +9:30", 2604 | offset: 34200, 2605 | offsetHHMM: "+09:30", 2606 | }, 2607 | }, 2608 | "GMT+10:30": []*TzAbbreviationInfo{ 2609 | { 2610 | countryCode: "", 2611 | isDST: false, 2612 | name: "Greenwich Mean Time +10:30", 2613 | offset: 37800, 2614 | offsetHHMM: "+10:30", 2615 | }, 2616 | }, 2617 | "GMT+13:45": []*TzAbbreviationInfo{ 2618 | { 2619 | countryCode: "", 2620 | isDST: false, 2621 | name: "Greenwich Mean Time +13:45", 2622 | offset: 49500, 2623 | offsetHHMM: "+13:45", 2624 | }, 2625 | }, 2626 | "GMT-9:30": []*TzAbbreviationInfo{ 2627 | { 2628 | countryCode: "", 2629 | isDST: false, 2630 | name: "Greenwich Mean Time -9:30", 2631 | offset: -34200, 2632 | offsetHHMM: "-09:30", 2633 | }, 2634 | }, 2635 | // military timezones 2636 | "A": []*TzAbbreviationInfo{ 2637 | { 2638 | name: "Alfa Time Zone", 2639 | offset: 3600, 2640 | offsetHHMM: "+01:00", 2641 | }, 2642 | }, 2643 | "B": []*TzAbbreviationInfo{ 2644 | { 2645 | name: "Bravo Time Zone", 2646 | offset: 7200, 2647 | offsetHHMM: "+02:00", 2648 | }, 2649 | }, 2650 | "C": []*TzAbbreviationInfo{ 2651 | { 2652 | name: "Charlie Time Zone", 2653 | offset: 10800, 2654 | offsetHHMM: "+03:00", 2655 | }, 2656 | }, 2657 | "D": []*TzAbbreviationInfo{ 2658 | { 2659 | name: "Delta Time Zone", 2660 | offset: 14400, 2661 | offsetHHMM: "+04:00", 2662 | }, 2663 | }, 2664 | "E": []*TzAbbreviationInfo{ 2665 | { 2666 | name: "Echo Time Zone", 2667 | offset: 18000, 2668 | offsetHHMM: "+05:00", 2669 | }, 2670 | }, 2671 | "F": []*TzAbbreviationInfo{ 2672 | { 2673 | name: "Foxtrot Time Zone", 2674 | offset: 21600, 2675 | offsetHHMM: "+06:00", 2676 | }, 2677 | }, 2678 | "G": []*TzAbbreviationInfo{ 2679 | { 2680 | name: "Golf Time Zone", 2681 | offset: 25200, 2682 | offsetHHMM: "+07:00", 2683 | }, 2684 | }, 2685 | "H": []*TzAbbreviationInfo{ 2686 | { 2687 | name: "Hotel Time Zone", 2688 | offset: 28800, 2689 | offsetHHMM: "+08:00", 2690 | }, 2691 | }, 2692 | "I": []*TzAbbreviationInfo{ 2693 | { 2694 | name: "India Time Zone", 2695 | offset: 32400, 2696 | offsetHHMM: "+09:00", 2697 | }, 2698 | }, 2699 | "K": []*TzAbbreviationInfo{ 2700 | { 2701 | name: "Kilo Time Zone", 2702 | offset: 36000, 2703 | offsetHHMM: "+10:00", 2704 | }, 2705 | }, 2706 | "L": []*TzAbbreviationInfo{ 2707 | { 2708 | name: "Lima Time Zone", 2709 | offset: 39600, 2710 | offsetHHMM: "+11:00", 2711 | }, 2712 | }, 2713 | "M": []*TzAbbreviationInfo{ 2714 | { 2715 | name: "Mike Time Zone", 2716 | offset: 43200, 2717 | offsetHHMM: "+12:00", 2718 | }, 2719 | }, 2720 | "N": []*TzAbbreviationInfo{ 2721 | { 2722 | name: "November Time Zone", 2723 | offset: -3600, 2724 | offsetHHMM: "-01:00", 2725 | }, 2726 | }, 2727 | "O": []*TzAbbreviationInfo{ 2728 | { 2729 | name: "Oscar Time Zone", 2730 | offset: -7200, 2731 | offsetHHMM: "-02:00", 2732 | }, 2733 | }, 2734 | "P": []*TzAbbreviationInfo{ 2735 | { 2736 | name: "Papa Time Zone", 2737 | offset: -10800, 2738 | offsetHHMM: "-03:00", 2739 | }, 2740 | }, 2741 | "Q": []*TzAbbreviationInfo{ 2742 | { 2743 | name: "Quebec Time Zone", 2744 | offset: -14400, 2745 | offsetHHMM: "-04:00", 2746 | }, 2747 | }, 2748 | "R": []*TzAbbreviationInfo{ 2749 | { 2750 | name: "Romeo Time Zone", 2751 | offset: -18000, 2752 | offsetHHMM: "-05:00", 2753 | }, 2754 | }, 2755 | "S": []*TzAbbreviationInfo{ 2756 | { 2757 | name: "Sierra Time Zone", 2758 | offset: -21600, 2759 | offsetHHMM: "-06:00", 2760 | }, 2761 | }, 2762 | "T": []*TzAbbreviationInfo{ 2763 | { 2764 | name: "Tango Time Zone", 2765 | offset: -25200, 2766 | offsetHHMM: "-07:00", 2767 | }, 2768 | }, 2769 | "U": []*TzAbbreviationInfo{ 2770 | { 2771 | name: "Uniform Time Zone", 2772 | offset: -28800, 2773 | offsetHHMM: "-08:00", 2774 | }, 2775 | }, 2776 | "V": []*TzAbbreviationInfo{ 2777 | { 2778 | name: "Victor Time Zone", 2779 | offset: -32400, 2780 | offsetHHMM: "-09:00", 2781 | }, 2782 | }, 2783 | "W": []*TzAbbreviationInfo{ 2784 | { 2785 | name: "Whiskey Time Zone", 2786 | offset: -36000, 2787 | offsetHHMM: "-10:00", 2788 | }, 2789 | }, 2790 | "X": []*TzAbbreviationInfo{ 2791 | { 2792 | name: "X-ray Time Zone", 2793 | offset: -39600, 2794 | offsetHHMM: "-11:00", 2795 | }, 2796 | }, 2797 | "Y": []*TzAbbreviationInfo{ 2798 | { 2799 | name: "Yankee Time Zone", 2800 | offset: -43200, 2801 | offsetHHMM: "-12:00", 2802 | }, 2803 | }, 2804 | "Z": []*TzAbbreviationInfo{ 2805 | { 2806 | name: "Zulu Time Zone", 2807 | offset: 0, 2808 | offsetHHMM: "+00:00", 2809 | }, 2810 | }, 2811 | } 2812 | -------------------------------------------------------------------------------- /tzinfo.go: -------------------------------------------------------------------------------- 1 | package timezone 2 | 3 | // TzInfo represents information about a particular timezone. 4 | type TzInfo struct { 5 | longGeneric string 6 | longStandard string 7 | longDaylight string 8 | shortGeneric string 9 | shortStandard string 10 | shortDaylight string 11 | standardOffset int 12 | daylightOffset int 13 | standardOffsetHHMM string 14 | daylightOffsetHHMM string 15 | countryCode string 16 | isDeprecated bool 17 | linkTo string 18 | lastDST int 19 | } 20 | 21 | // LongGeneric returns the generic time name. 22 | // It returns the empty string if there is no generic time name. 23 | func (ti *TzInfo) LongGeneric() string { 24 | return ti.longGeneric 25 | } 26 | 27 | // LongStandard returns the standard time name. 28 | func (ti *TzInfo) LongStandard() string { 29 | return ti.longStandard 30 | } 31 | 32 | // LongDaylight returns the daylight saving time name. 33 | // It returns the empty string if there is no daylight saving time name. 34 | func (ti *TzInfo) LongDaylight() string { 35 | return ti.longDaylight 36 | } 37 | 38 | // ShortGeneric returns the generic timezone abbreviation. 39 | // It returns the empty string if there is no generic timezone abbreviation. 40 | func (ti *TzInfo) ShortGeneric() string { 41 | return ti.shortGeneric 42 | } 43 | 44 | // ShortStandard returns the standard timezone abbreviation. 45 | func (ti *TzInfo) ShortStandard() string { 46 | return ti.shortStandard 47 | } 48 | 49 | // ShortDaylight returns the daylight saving timezone abbreviation. 50 | // It returns the empty string if there is no daylight saving timezone abbreviation. 51 | func (ti *TzInfo) ShortDaylight() string { 52 | return ti.shortDaylight 53 | } 54 | 55 | // StandardOffset returns the standard time offset 56 | func (ti *TzInfo) StandardOffset() int { 57 | return ti.standardOffset 58 | } 59 | 60 | // DaylightOffset returns the daylight saving time offset 61 | // It returns the 0 if there is no daylight saving. 62 | func (ti *TzInfo) DaylightOffset() int { 63 | return ti.daylightOffset 64 | } 65 | 66 | // StandardOffsetHHMM returns the standard time offset in (+/-)hh:mm format. 67 | func (ti *TzInfo) StandardOffsetHHMM() string { 68 | return ti.standardOffsetHHMM 69 | } 70 | 71 | // DaylightOffsetHHMM returns the daylight saving time offset in (+/-)hh:mm format. 72 | // It returns the "+00:00" if there is no daylight saving. 73 | func (ti *TzInfo) DaylightOffsetHHMM() string { 74 | return ti.daylightOffsetHHMM 75 | } 76 | 77 | // CountryCode returns the ISO 3166-1 alpha-2 country code. 78 | // It returns the empty string if there is no CountryCode. 79 | func (ti *TzInfo) CountryCode() string { 80 | return ti.countryCode 81 | } 82 | 83 | // IsDeprecated reports whether the timezone is deprecated. 84 | func (ti *TzInfo) IsDeprecated() bool { 85 | return ti.isDeprecated 86 | } 87 | 88 | // LinkTo returns the source of the alias. 89 | // It returns the empty string if there is no alias. 90 | func (ti *TzInfo) LinkTo() string { 91 | return ti.linkTo 92 | } 93 | 94 | // LastDST returns the last year when there was daylight savings time. 95 | // It returns the 0 if has never observed daylight savings. 96 | func (ti *TzInfo) LastDST() int { 97 | return ti.lastDST 98 | } 99 | 100 | // HasDST reports whether or not it has daylight savings time. 101 | func (ti *TzInfo) HasDST() bool { 102 | return ti.longDaylight != "" 103 | } 104 | 105 | // TzAbbreviationInfo represents timezone abbreviation information about a particular timezone. 106 | type TzAbbreviationInfo struct { 107 | countryCode string 108 | isDST bool 109 | name string 110 | offset int 111 | offsetHHMM string 112 | } 113 | 114 | // CountryCode returns the ISO 3166-1 alpha-2 country code. 115 | // It returns the empty string if there is no CountryCode. 116 | func (tai *TzAbbreviationInfo) CountryCode() string { 117 | return tai.countryCode 118 | } 119 | 120 | // IsDST reports whether or not it is daylight savings time. 121 | func (tai *TzAbbreviationInfo) IsDST() bool { 122 | return tai.isDST 123 | } 124 | 125 | // Name returns the time name. 126 | func (tai *TzAbbreviationInfo) Name() string { 127 | return tai.name 128 | } 129 | 130 | // Offset returns the time offset. 131 | func (tai *TzAbbreviationInfo) Offset() int { 132 | return tai.offset 133 | } 134 | 135 | // OffsetHHMM returns the time offset in (+/-)hh:mm format. 136 | func (tai *TzAbbreviationInfo) OffsetHHMM() string { 137 | return tai.offsetHHMM 138 | } 139 | --------------------------------------------------------------------------------