tz_offset 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f9363efb498a8b6180965d24800702afb397ce68
4
+ data.tar.gz: 50c57cf3be860d0f7e8674b7499a8aec964c552f
5
+ SHA512:
6
+ metadata.gz: 31dbb1f263b893d1299772afcaadb0e7e87e90565ff35c91af64482946f81f5737ebef7274520dba33eb601847e7f4274a0bb4088fea979befab07cf5bece8f5
7
+ data.tar.gz: dc8e375a8e93506c02ad56c95d91d365059564add20ab516568c9ef50cdc831a2d31e470b3e2357c77ea6c9c072a3b1e690600ec4432b37dc73cc752446ee7d4
@@ -0,0 +1,2 @@
1
+ --markup=markdown
2
+ --no-private
@@ -0,0 +1,110 @@
1
+ # TZOffset
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/tz_offset.svg)](http://badge.fury.io/rb/tz_offset)
4
+ [![Dependency Status](https://gemnasium.com/molybdenum-99/tz_offset.svg)](https://gemnasium.com/molybdenum-99/tz_offset)
5
+ [![Build Status](https://travis-ci.org/molybdenum-99/tz_offset.svg?branch=master)](https://travis-ci.org/molybdenum-99/tz_offset)
6
+
7
+ Ever tried to convert your distant friend's or colleague's phrase "OK, let's connect tomorrow
8
+ at 6 pm my time (GMT+8)" into easily calculatable Ruby code? E.g. what time it would be in your
9
+ timezone at 18:00 GMT+8? What is your favorite solution? Now it should be that:
10
+
11
+ ```ruby
12
+ TZOffset.parse('GMT+8').local(2016, 10, 20, 18).localtime
13
+ # => 2016-10-20 13:00:00 +0300
14
+
15
+ # or just
16
+ TZOffset.parse('+8').local(2016, 10, 20, 18).localtime
17
+ # => 2016-10-20 13:00:00 +0300
18
+
19
+ # Also works with most common timezone abbreviations
20
+ TZOffset.parse('CEST').local(2016, 10, 20, 18).localtime
21
+ # => 2016-10-20 19:00:00 +0300
22
+ ```
23
+
24
+ In other words, `TZOffset` is simple, no-magic, incapsulated abstraction of "time offset".
25
+
26
+ ## Features and problems
27
+
28
+ * Easy-to-use, intuitive, dead simple, OS independent;
29
+ * No brains included: no huge and comprehensive database of historical times, no automatic
30
+ DST conversion; you just know offset you need, and have it as a near-to-mathematical
31
+ value;
32
+ * Simple value objects, easily converted to/from YAML (so you can save them to databases,
33
+ pass to delayed jobs and so on);
34
+ * Knows about all common timezone abbreviations (got them from
35
+ [Wikipedia list](https://en.wikipedia.org/wiki/List_of_time_zone_abbreviations));
36
+ * For ambiguous abbreviations, just returns list of all of them:
37
+
38
+ ```ruby
39
+ TZOffset.parse('EET')
40
+ # => #<TZOffset +02:00 (EET)>
41
+ TZOffset.parse('CDT')
42
+ # => [#<TZOffset -05:00 (CDT)>, #<TZOffset -04:00 (CDT)>]
43
+ ```
44
+
45
+ * For symbolic timezones, provides a description, if available:
46
+
47
+ ```ruby
48
+ TZOffset.parse('CDT').map(&:description)
49
+ # => ["Central Daylight Time (North America)", "Cuba Daylight Time"]
50
+ TZOffset.parse('CDT').map(&:region)
51
+ # => ["Central", "Cuba"]
52
+
53
+ # NB: Just "Central", "Eastern" and so on is related to North America in timezones nomenclature
54
+ ```
55
+
56
+ * for [DST](https://en.wikipedia.org/wiki/Daylight_saving_time) and non-DST timezones provides
57
+ dst-flag and counterpart timezone, if available:
58
+
59
+ ```ruby
60
+ eet = TZOffset.parse('EET')
61
+ # => #<TZOffset +02:00 (EET)>
62
+ eet.dst?
63
+ # => false
64
+ eet.opposite
65
+ # => #<TZOffset +03:00 (EEST)>
66
+ [eet.description, eet.opposite.description]
67
+ # => ["Eastern European Time", "Eastern European Summer Time"]
68
+ ```
69
+
70
+ ## Installation
71
+
72
+ Do your usual routine with gem named `tz_offset` (e.g. `gem install tz_offset` or add
73
+ `gem "tz_offset` to your `Gemfile`).
74
+
75
+ ## Usage
76
+
77
+ Most of it is already shown above!
78
+
79
+ ```ruby
80
+ require 'tz_offset'
81
+
82
+ off = TZOffset.parse('-02:30')
83
+ # => #<TZOffset -02:30>
84
+ off.now
85
+ # => 2016-10-25 16:07:55 -0230
86
+ off.local(2016, 10, 1)
87
+ # => 2016-10-01 00:00:00 -0230
88
+
89
+ eet = TZOffset.parse('EET')
90
+ # => #<TZOffset +02:00 (EET)>
91
+ eet.now
92
+ # => 2016-10-25 20:29:03 +0200
93
+ eet.description
94
+ # => "Eastern European Time"
95
+ eet.region
96
+ # => "Eastern European"
97
+ eet.opposite
98
+ # => #<TZOffset +03:00 (EEST)>
99
+ eet.opposite.now
100
+ # => 2016-10-25 21:39:26 +0300
101
+ ```
102
+
103
+ ## Author
104
+
105
+ [Victor Shepelev](http://zverok.github.io/) -- extracted from [reality](https://github.com/molybdenum-99/reality)
106
+ project.
107
+
108
+ ## License
109
+
110
+ MIT.
@@ -0,0 +1,176 @@
1
+ require 'time'
2
+
3
+ # Simple class representing timezone offset (in minutes). Knows almost nothing
4
+ # about timezone name, DST or other complications, but useful when ONLY offset is known.
5
+ #
6
+ # Usage:
7
+ #
8
+ # ```ruby
9
+ # o = Reality::TZOffset.parse('UTC+3')
10
+ # # => #<Reality::TZOffset(UTC+03:00)>
11
+ #
12
+ # o.now
13
+ # # => 2016-04-16 19:01:40 +0300
14
+ # o.local(2016, 4, 1, 20, 30)
15
+ # # => 2016-04-01 20:30:00 +0300
16
+ # o.convert(Time.now)
17
+ # # => 2016-04-16 19:02:22 +0300
18
+ # ```
19
+ #
20
+ class TZOffset
21
+ # Number of minutes in offset.
22
+ #
23
+ # @return [Fixnum]
24
+ attr_reader :minutes
25
+
26
+ # Symbolic offset name if available (like "EEST").
27
+ #
28
+ # @note
29
+ # TZOffset never tries to "guess" the name, it is only known if an object was parsed/created
30
+ # from it.
31
+ #
32
+ # @return [String]
33
+ attr_reader :name
34
+
35
+ # Full symbolic timezone description, as per wikipedia (like "Eastern European Summer Time"
36
+ # for "EEST").
37
+ #
38
+ # @return [String]
39
+ attr_reader :description
40
+
41
+ # "Region" part of {#description}, like "Eastern European" for "EEST".
42
+ #
43
+ # @return [String]
44
+ attr_reader :region
45
+
46
+ # @private
47
+ MINUSES = /[−—–]/
48
+
49
+ # Parses TZOffset from string. Understands several options like:
50
+ #
51
+ # * `GMT` (not all TZ names, just well-known
52
+ # [abbreviations](https://en.wikipedia.org/wiki/List_of_time_zone_abbreviations));
53
+ # * `UTC+3` (or `GMT+3`);
54
+ # * `+03:30`;
55
+ # * ..and several combinations.
56
+ #
57
+ # @return [TZOffset]
58
+ def self.parse(text)
59
+ return ABBREV[text.upcase] if ABBREV.key?(text.upcase)
60
+
61
+ text = text.gsub(MINUSES, '-')
62
+ sec = case text
63
+ when /^[A-Z]{3}$/
64
+ Time.zone_offset(text)
65
+ when /^(?:UTC|GMT)?([+-]\d{1,2}:?\d{2})$/
66
+ offset = $1
67
+ Time.zone_offset(offset.sub(/^([+-])(\d):/, '\10\2:'))
68
+ when /^(?:UTC|GMT)?([+-]\d{1,2})/
69
+ $1.to_i * 3600
70
+ end
71
+
72
+ sec && new(sec / 60)
73
+ end
74
+
75
+ # Constructs offset from number of minutes. In most cases, you don't
76
+ # want to use it, but rather {TZOffset.parse}.
77
+ #
78
+ # @param minutes [Fixnum] Number of minutes in offset.
79
+ def initialize(minutes, name: nil, description: nil, region: nil, isdst: nil)
80
+ @minutes = minutes
81
+ @name = name
82
+ @description = description
83
+ @isdst = isdst
84
+ @region = region
85
+ end
86
+
87
+ # @return [String]
88
+ def inspect
89
+ if name
90
+ '#<%s %s%02i:%02i (%s)>' % [self.class.name, sign, *minutes.abs.divmod(60), name]
91
+ else
92
+ '#<%s %s%02i:%02i>' % [self.class.name, sign, *minutes.abs.divmod(60)]
93
+ end
94
+ end
95
+
96
+ # @return [String]
97
+ def to_s
98
+ '%s%02i:%02i' % [sign, *minutes.abs.divmod(60)]
99
+ end
100
+
101
+ # If offset is symbolic (e.g., "EET", not just "+02:00"), returns whether it is daylight
102
+ # saving time offset.
103
+ #
104
+ # See also {#opposite} for obtaining non-DST related to current DST offset and vice versa.
105
+ def dst?
106
+ @isdst
107
+ end
108
+
109
+ # @return [Boolean]
110
+ def <=>(other)
111
+ other.is_a?(TZOffset) or raise ArgumentError, "Can't compare TZOffset with #{other.class}"
112
+ minutes <=> other.minutes
113
+ end
114
+
115
+ include Comparable
116
+
117
+ # @return [Boolean]
118
+ def ==(other)
119
+ other.class == self.class && other.minutes == minutes
120
+ end
121
+
122
+ # Like Ruby's `Time.local`, but in current offset.
123
+ #
124
+ # @return [Time] Constructed time in that offset.
125
+ def local(*values)
126
+ values << 0 until values.count == 6
127
+ mk(*values)
128
+ end
129
+
130
+ # Converts `tm` into current offset.
131
+ #
132
+ # @param tm [Time] Time object to convert (with any offset);
133
+ # @return [Time] Converted object.
134
+ def convert(tm)
135
+ t = tm.getutc + minutes * 60
136
+
137
+ # FIXME: usec are lost
138
+ mk(t.year, t.month, t.day, t.hour, t.min, t.sec)
139
+ end
140
+
141
+ # Like Ruby's `Time.now`, but in current offset.
142
+ #
143
+ # @return [Time] Current time in that offset.
144
+ def now
145
+ convert(Time.now)
146
+ end
147
+
148
+ # For symbolic offsets, returns opposite (DST for non-DST and vice versa) offset object if
149
+ # known, `nil` otherwise.
150
+ #
151
+ # @example
152
+ # eet = TZOffset.parse('EET')
153
+ # # => #<TZOffset +02:00 (EET)>
154
+ # eet.opposite
155
+ # # => #<TZOffset +03:00 (EEST)>
156
+ # TZOffset.parse('+8').opposite
157
+ # # => nil
158
+ #
159
+ # @return [TZOffset]
160
+ def opposite
161
+ return nil unless region
162
+ ABBREV.values.flatten.detect { |tz| tz.region == region && tz.dst? == !dst? }
163
+ end
164
+
165
+ private
166
+
167
+ def sign
168
+ minutes < 0 ? '-' : '+'
169
+ end
170
+
171
+ def mk(*components)
172
+ Time.new(*components, to_s)
173
+ end
174
+ end
175
+
176
+ require_relative 'tz_offset/abbrev'
@@ -0,0 +1,28 @@
1
+ require 'yaml'
2
+
3
+ class TZOffset
4
+ # @private
5
+ PATH = File.expand_path('../data/abbreviations.yaml', __FILE__)
6
+
7
+ # @private
8
+ #
9
+ # List of Timezone abbreviations, loaded from datafile distributed with a gem
10
+ # (abbreviations.yaml) and used when parsing timezones.
11
+ #
12
+ # Rendered really ugly by YARD... So, private.
13
+ ABBREV =
14
+ YAML
15
+ .load_file(PATH)
16
+ .map { |row|
17
+ TZOffset.new(
18
+ row.fetch(:val),
19
+ name: row.fetch(:abbr),
20
+ description: row.fetch(:title),
21
+ region: row.fetch(:region),
22
+ isdst: row.fetch(:dst)
23
+ )
24
+ }
25
+ .group_by(&:name)
26
+ .map { |name, group| [name, group.count == 1 ? group.first : group] }
27
+ .to_h
28
+ end
@@ -0,0 +1,961 @@
1
+ ---
2
+ - :abbr: ACDT
3
+ :title: Australian Central Daylight Savings Time
4
+ :region: Australian Central
5
+ :dst: true
6
+ :val: 630
7
+ - :abbr: ACST
8
+ :title: Australian Central Standard Time
9
+ :region: Australian Central
10
+ :dst: false
11
+ :val: 570
12
+ - :abbr: ACT
13
+ :title: Acre Time
14
+ :region: Acre
15
+ :dst: false
16
+ :val: -300
17
+ - :abbr: ADT
18
+ :title: Atlantic Daylight Time
19
+ :region: Atlantic
20
+ :dst: true
21
+ :val: -180
22
+ - :abbr: AEDT
23
+ :title: Australian Eastern Daylight Savings Time
24
+ :region: Australian Eastern
25
+ :dst: true
26
+ :val: 660
27
+ - :abbr: AEST
28
+ :title: Australian Eastern Standard Time
29
+ :region: Australian Eastern
30
+ :dst: false
31
+ :val: 600
32
+ - :abbr: AFT
33
+ :title: Afghanistan Time
34
+ :region: Afghanistan
35
+ :dst: false
36
+ :val: 270
37
+ - :abbr: AKDT
38
+ :title: Alaska Daylight Time
39
+ :region: Alaska
40
+ :dst: true
41
+ :val: -480
42
+ - :abbr: AKST
43
+ :title: Alaska Standard Time
44
+ :region: Alaska
45
+ :dst: false
46
+ :val: -540
47
+ - :abbr: AMST
48
+ :title: Amazon Summer Time (Brazil)
49
+ :region: Amazon
50
+ :dst: true
51
+ :val: -180
52
+ - :abbr: AMT
53
+ :title: Amazon Time (Brazil)
54
+ :region: Amazon
55
+ :dst: false
56
+ :val: -240
57
+ - :abbr: AMT
58
+ :title: Armenia Time
59
+ :region: Armenia
60
+ :dst: false
61
+ :val: 240
62
+ - :abbr: ART
63
+ :title: Argentina Time
64
+ :region: Argentina
65
+ :dst: false
66
+ :val: -180
67
+ - :abbr: AST
68
+ :title: Arabia Standard Time
69
+ :region: Arabia
70
+ :dst: false
71
+ :val: 180
72
+ - :abbr: AST
73
+ :title: Atlantic Standard Time
74
+ :region: Atlantic
75
+ :dst: false
76
+ :val: -240
77
+ - :abbr: AWST
78
+ :title: Australian Western Standard Time
79
+ :region: Australian Western
80
+ :dst: false
81
+ :val: 480
82
+ - :abbr: AZOST
83
+ :title: Azores Summer Time
84
+ :region: Azores
85
+ :dst: true
86
+ :val: 0
87
+ - :abbr: AZOT
88
+ :title: Azores Standard Time
89
+ :region: Azores
90
+ :dst: false
91
+ :val: -60
92
+ - :abbr: AZT
93
+ :title: Azerbaijan Time
94
+ :region: Azerbaijan
95
+ :dst: false
96
+ :val: 240
97
+ - :abbr: BDT
98
+ :title: Brunei Time
99
+ :region: Brunei
100
+ :dst: false
101
+ :val: 480
102
+ - :abbr: BIOT
103
+ :title: British Indian Ocean Time
104
+ :region: British Indian Ocean
105
+ :dst: false
106
+ :val: 360
107
+ - :abbr: BIT
108
+ :title: Baker Island Time
109
+ :region: Baker Island
110
+ :dst: false
111
+ :val: -720
112
+ - :abbr: BOT
113
+ :title: Bolivia Time
114
+ :region: Bolivia
115
+ :dst: false
116
+ :val: -240
117
+ - :abbr: BRST
118
+ :title: Brasilia Summer Time
119
+ :region: Brasilia
120
+ :dst: true
121
+ :val: -120
122
+ - :abbr: BRT
123
+ :title: Brasilia Time
124
+ :region: Brasilia
125
+ :dst: false
126
+ :val: -180
127
+ - :abbr: BST
128
+ :title: Bangladesh Standard Time
129
+ :region: Bangladesh
130
+ :dst: false
131
+ :val: 360
132
+ - :abbr: BST
133
+ :title: Bougainville Standard Time
134
+ :region: Bougainville
135
+ :dst: false
136
+ :val: 660
137
+ - :abbr: BST
138
+ :title: British Summer Time (British Standard Time from Feb 1968 to Oct 1971)
139
+ :region: British
140
+ :dst: true
141
+ :val: 60
142
+ - :abbr: BTT
143
+ :title: Bhutan Time
144
+ :region: Bhutan
145
+ :dst: false
146
+ :val: 360
147
+ - :abbr: CAT
148
+ :title: Central Africa Time
149
+ :region: Central Africa
150
+ :dst: false
151
+ :val: 120
152
+ - :abbr: CCT
153
+ :title: Cocos Islands Time
154
+ :region: Cocos Islands
155
+ :dst: false
156
+ :val: 390
157
+ - :abbr: CDT
158
+ :title: Central Daylight Time (North America)
159
+ :region: Central
160
+ :dst: true
161
+ :val: -300
162
+ - :abbr: CDT
163
+ :title: Cuba Daylight Time
164
+ :region: Cuba
165
+ :dst: true
166
+ :val: -240
167
+ - :abbr: CEST
168
+ :title: Central European Summer Time (Cf. HAEC)
169
+ :region: Central European
170
+ :dst: true
171
+ :val: 120
172
+ - :abbr: CET
173
+ :title: Central European Time
174
+ :region: Central European
175
+ :dst: false
176
+ :val: 60
177
+ - :abbr: CHADT
178
+ :title: Chatham Daylight Time
179
+ :region: Chatham
180
+ :dst: true
181
+ :val: 825
182
+ - :abbr: CHAST
183
+ :title: Chatham Standard Time
184
+ :region: Chatham
185
+ :dst: false
186
+ :val: 765
187
+ - :abbr: CHOST
188
+ :title: Choibalsan Summer Time
189
+ :region: Choibalsan
190
+ :dst: true
191
+ :val: 540
192
+ - :abbr: CHOT
193
+ :title: Choibalsan Standard Time
194
+ :region: Choibalsan
195
+ :dst: false
196
+ :val: 480
197
+ - :abbr: CHST
198
+ :title: Chamorro Standard Time
199
+ :region: Chamorro
200
+ :dst: false
201
+ :val: 600
202
+ - :abbr: CHUT
203
+ :title: Chuuk Time
204
+ :region: Chuuk
205
+ :dst: false
206
+ :val: 600
207
+ - :abbr: CIST
208
+ :title: Clipperton Island Standard Time
209
+ :region: Clipperton Island
210
+ :dst: false
211
+ :val: -480
212
+ - :abbr: CIT
213
+ :title: Central Indonesia Time
214
+ :region: Central Indonesia
215
+ :dst: false
216
+ :val: 480
217
+ - :abbr: CKT
218
+ :title: Cook Island Time
219
+ :region: Cook Island
220
+ :dst: false
221
+ :val: -600
222
+ - :abbr: CLST
223
+ :title: Chile Summer Time
224
+ :region: Chile
225
+ :dst: true
226
+ :val: -180
227
+ - :abbr: CLT
228
+ :title: Chile Standard Time
229
+ :region: Chile
230
+ :dst: false
231
+ :val: -240
232
+ - :abbr: COST
233
+ :title: Colombia Summer Time
234
+ :region: Colombia
235
+ :dst: true
236
+ :val: -240
237
+ - :abbr: COT
238
+ :title: Colombia Time
239
+ :region: Colombia
240
+ :dst: false
241
+ :val: -300
242
+ - :abbr: CST
243
+ :title: Central Standard Time (North America)
244
+ :region: Central
245
+ :dst: false
246
+ :val: -360
247
+ - :abbr: CST
248
+ :title: China Standard Time
249
+ :region: China
250
+ :dst: false
251
+ :val: 480
252
+ - :abbr: CST
253
+ :title: Cuba Standard Time
254
+ :region: Cuba
255
+ :dst: false
256
+ :val: -300
257
+ - :abbr: CT
258
+ :title: China time
259
+ :region: China
260
+ :dst: false
261
+ :val: 480
262
+ - :abbr: CVT
263
+ :title: Cape Verde Time
264
+ :region: Cape Verde
265
+ :dst: false
266
+ :val: -60
267
+ - :abbr: CXT
268
+ :title: Christmas Island Time
269
+ :region: Christmas Island
270
+ :dst: false
271
+ :val: 420
272
+ - :abbr: DAVT
273
+ :title: Davis Time
274
+ :region: Davis
275
+ :dst: false
276
+ :val: 420
277
+ - :abbr: DDUT
278
+ :title: Dumont d'Urville Time
279
+ :region: Dumont d'Urville
280
+ :dst: false
281
+ :val: 600
282
+ - :abbr: DFT
283
+ :title: AIX specific equivalent of Central European Time
284
+ :region: AIX specific equivalent of Central European
285
+ :dst: false
286
+ :val: 60
287
+ - :abbr: EASST
288
+ :title: Easter Island Summer Time
289
+ :region: Easter Island
290
+ :dst: true
291
+ :val: -300
292
+ - :abbr: EAST
293
+ :title: Easter Island Standard Time
294
+ :region: Easter Island
295
+ :dst: false
296
+ :val: -360
297
+ - :abbr: EAT
298
+ :title: East Africa Time
299
+ :region: East Africa
300
+ :dst: false
301
+ :val: 180
302
+ - :abbr: ECT
303
+ :title: Eastern Caribbean Time (does not recognise DST)
304
+ :region: Eastern Caribbean
305
+ :dst: false
306
+ :val: -240
307
+ - :abbr: ECT
308
+ :title: Ecuador Time
309
+ :region: Ecuador
310
+ :dst: false
311
+ :val: -300
312
+ - :abbr: EDT
313
+ :title: Eastern Daylight Time (North America)
314
+ :region: Eastern
315
+ :dst: true
316
+ :val: -240
317
+ - :abbr: EEST
318
+ :title: Eastern European Summer Time
319
+ :region: Eastern European
320
+ :dst: true
321
+ :val: 180
322
+ - :abbr: EET
323
+ :title: Eastern European Time
324
+ :region: Eastern European
325
+ :dst: false
326
+ :val: 120
327
+ - :abbr: EGST
328
+ :title: Eastern Greenland Summer Time
329
+ :region: Eastern Greenland
330
+ :dst: true
331
+ :val: 0
332
+ - :abbr: EGT
333
+ :title: Eastern Greenland Time
334
+ :region: Eastern Greenland
335
+ :dst: false
336
+ :val: -60
337
+ - :abbr: EIT
338
+ :title: Eastern Indonesian Time
339
+ :region: Eastern Indonesian
340
+ :dst: false
341
+ :val: 540
342
+ - :abbr: EST
343
+ :title: Eastern Standard Time (North America)
344
+ :region: Eastern
345
+ :dst: false
346
+ :val: -300
347
+ - :abbr: FET
348
+ :title: Further-eastern European Time
349
+ :region: Further-eastern European
350
+ :dst: false
351
+ :val: 180
352
+ - :abbr: FJT
353
+ :title: Fiji Time
354
+ :region: Fiji
355
+ :dst: false
356
+ :val: 720
357
+ - :abbr: FKST
358
+ :title: Falkland Islands Summer Time
359
+ :region: Falkland Islands
360
+ :dst: true
361
+ :val: -180
362
+ - :abbr: FKT
363
+ :title: Falkland Islands Time
364
+ :region: Falkland Islands
365
+ :dst: false
366
+ :val: -240
367
+ - :abbr: FNT
368
+ :title: Fernando de Noronha Time
369
+ :region: Fernando de Noronha
370
+ :dst: false
371
+ :val: -120
372
+ - :abbr: GALT
373
+ :title: Galapagos Time
374
+ :region: Galapagos
375
+ :dst: false
376
+ :val: -360
377
+ - :abbr: GAMT
378
+ :title: Gambier Islands Time
379
+ :region: Gambier Islands
380
+ :dst: false
381
+ :val: -540
382
+ - :abbr: GET
383
+ :title: Georgia Standard Time
384
+ :region: Georgia
385
+ :dst: false
386
+ :val: 240
387
+ - :abbr: GFT
388
+ :title: French Guiana Time
389
+ :region: French Guiana
390
+ :dst: false
391
+ :val: -180
392
+ - :abbr: GILT
393
+ :title: Gilbert Island Time
394
+ :region: Gilbert Island
395
+ :dst: false
396
+ :val: 720
397
+ - :abbr: GIT
398
+ :title: Gambier Island Time
399
+ :region: Gambier Island
400
+ :dst: false
401
+ :val: -540
402
+ - :abbr: GMT
403
+ :title: Greenwich Mean Time
404
+ :region: Greenwich Mean
405
+ :dst: false
406
+ :val: 0
407
+ - :abbr: GST
408
+ :title: South Georgia and the South Sandwich Islands Time
409
+ :region: South Georgia and the South Sandwich Islands
410
+ :dst: false
411
+ :val: -120
412
+ - :abbr: GST
413
+ :title: Gulf Standard Time
414
+ :region: Gulf
415
+ :dst: false
416
+ :val: 240
417
+ - :abbr: GYT
418
+ :title: Guyana Time
419
+ :region: Guyana
420
+ :dst: false
421
+ :val: -240
422
+ - :abbr: HADT
423
+ :title: Hawaii-Aleutian Daylight Time
424
+ :region: Hawaii-Aleutian
425
+ :dst: true
426
+ :val: -540
427
+ - :abbr: HAEC
428
+ :title: Heure Avancée d'Europe Centrale francised name for CEST Time
429
+ :region: Heure Avancée d'Europe Centrale francised name for CEST
430
+ :dst: false
431
+ :val: 120
432
+ - :abbr: HAST
433
+ :title: Hawaii-Aleutian Standard Time
434
+ :region: Hawaii-Aleutian
435
+ :dst: false
436
+ :val: -600
437
+ - :abbr: HKT
438
+ :title: Hong Kong Time
439
+ :region: Hong Kong
440
+ :dst: false
441
+ :val: 480
442
+ - :abbr: HMT
443
+ :title: Heard and McDonald Islands Time
444
+ :region: Heard and McDonald Islands
445
+ :dst: false
446
+ :val: 300
447
+ - :abbr: HOVST
448
+ :title: Khovd Summer Time
449
+ :region: Khovd
450
+ :dst: true
451
+ :val: 480
452
+ - :abbr: HOVT
453
+ :title: Khovd Standard Time
454
+ :region: Khovd
455
+ :dst: false
456
+ :val: 420
457
+ - :abbr: ICT
458
+ :title: Indochina Time
459
+ :region: Indochina
460
+ :dst: false
461
+ :val: 420
462
+ - :abbr: IDT
463
+ :title: Israel Daylight Time
464
+ :region: Israel
465
+ :dst: true
466
+ :val: 180
467
+ - :abbr: IOT
468
+ :title: Indian Ocean Time
469
+ :region: Indian Ocean
470
+ :dst: false
471
+ :val: 180
472
+ - :abbr: IRDT
473
+ :title: Iran Daylight Time
474
+ :region: Iran
475
+ :dst: true
476
+ :val: 270
477
+ - :abbr: IRKT
478
+ :title: Irkutsk Time
479
+ :region: Irkutsk
480
+ :dst: false
481
+ :val: 480
482
+ - :abbr: IRST
483
+ :title: Iran Standard Time
484
+ :region: Iran
485
+ :dst: false
486
+ :val: 210
487
+ - :abbr: IST
488
+ :title: Indian Standard Time
489
+ :region: Indian
490
+ :dst: false
491
+ :val: 330
492
+ - :abbr: IST
493
+ :title: Irish Standard Time
494
+ :region: Irish
495
+ :dst: false
496
+ :val: 60
497
+ - :abbr: IST
498
+ :title: Israel Standard Time
499
+ :region: Israel
500
+ :dst: false
501
+ :val: 120
502
+ - :abbr: JST
503
+ :title: Japan Standard Time
504
+ :region: Japan
505
+ :dst: false
506
+ :val: 540
507
+ - :abbr: KGT
508
+ :title: Kyrgyzstan time
509
+ :region: Kyrgyzstan
510
+ :dst: false
511
+ :val: 360
512
+ - :abbr: KOST
513
+ :title: Kosrae Time
514
+ :region: Kosrae
515
+ :dst: false
516
+ :val: 660
517
+ - :abbr: KRAT
518
+ :title: Krasnoyarsk Time
519
+ :region: Krasnoyarsk
520
+ :dst: false
521
+ :val: 420
522
+ - :abbr: KST
523
+ :title: Korea Standard Time
524
+ :region: Korea
525
+ :dst: false
526
+ :val: 540
527
+ - :abbr: LHST
528
+ :title: Lord Howe Standard Time
529
+ :region: Lord Howe
530
+ :dst: false
531
+ :val: 630
532
+ - :abbr: LHST
533
+ :title: Lord Howe Summer Time
534
+ :region: Lord Howe
535
+ :dst: true
536
+ :val: 660
537
+ - :abbr: LINT
538
+ :title: Line Islands Time
539
+ :region: Line Islands
540
+ :dst: false
541
+ :val: 840
542
+ - :abbr: MAGT
543
+ :title: Magadan Time
544
+ :region: Magadan
545
+ :dst: false
546
+ :val: 720
547
+ - :abbr: MART
548
+ :title: Marquesas Islands Time
549
+ :region: Marquesas Islands
550
+ :dst: false
551
+ :val: -570
552
+ - :abbr: MAWT
553
+ :title: Mawson Station Time
554
+ :region: Mawson Station
555
+ :dst: false
556
+ :val: 300
557
+ - :abbr: MDT
558
+ :title: Mountain Daylight Time (North America)
559
+ :region: Mountain
560
+ :dst: true
561
+ :val: -360
562
+ - :abbr: MEST
563
+ :title: Middle European Summer Time
564
+ :region: Middle European
565
+ :dst: true
566
+ :val: 120
567
+ - :abbr: MET
568
+ :title: Middle European Time
569
+ :region: Middle European
570
+ :dst: false
571
+ :val: 60
572
+ - :abbr: MHT
573
+ :title: Marshall Islands Time
574
+ :region: Marshall Islands
575
+ :dst: false
576
+ :val: 720
577
+ - :abbr: MIST
578
+ :title: Macquarie Island Station Time
579
+ :region: Macquarie Island Station
580
+ :dst: false
581
+ :val: 660
582
+ - :abbr: MIT
583
+ :title: Marquesas Islands Time
584
+ :region: Marquesas Islands
585
+ :dst: false
586
+ :val: -570
587
+ - :abbr: MMT
588
+ :title: Myanmar Standard Time
589
+ :region: Myanmar
590
+ :dst: false
591
+ :val: 390
592
+ - :abbr: MSK
593
+ :title: Moscow Time
594
+ :region: Moscow
595
+ :dst: false
596
+ :val: 180
597
+ - :abbr: MST
598
+ :title: Malaysia Standard Time
599
+ :region: Malaysia
600
+ :dst: false
601
+ :val: 480
602
+ - :abbr: MST
603
+ :title: Mountain Standard Time (North America)
604
+ :region: Mountain
605
+ :dst: false
606
+ :val: -420
607
+ - :abbr: MUT
608
+ :title: Mauritius Time
609
+ :region: Mauritius
610
+ :dst: false
611
+ :val: 240
612
+ - :abbr: MVT
613
+ :title: Maldives Time
614
+ :region: Maldives
615
+ :dst: false
616
+ :val: 300
617
+ - :abbr: MYT
618
+ :title: Malaysia Time
619
+ :region: Malaysia
620
+ :dst: false
621
+ :val: 480
622
+ - :abbr: NCT
623
+ :title: New Caledonia Time
624
+ :region: New Caledonia
625
+ :dst: false
626
+ :val: 660
627
+ - :abbr: NDT
628
+ :title: Newfoundland Daylight Time
629
+ :region: Newfoundland
630
+ :dst: true
631
+ :val: -150
632
+ - :abbr: NFT
633
+ :title: Norfolk Time
634
+ :region: Norfolk
635
+ :dst: false
636
+ :val: 660
637
+ - :abbr: NPT
638
+ :title: Nepal Time
639
+ :region: Nepal
640
+ :dst: false
641
+ :val: 345
642
+ - :abbr: NST
643
+ :title: Newfoundland Standard Time
644
+ :region: Newfoundland
645
+ :dst: false
646
+ :val: -210
647
+ - :abbr: NT
648
+ :title: Newfoundland Time
649
+ :region: Newfoundland
650
+ :dst: false
651
+ :val: -210
652
+ - :abbr: NUT
653
+ :title: Niue Time
654
+ :region: Niue
655
+ :dst: false
656
+ :val: -660
657
+ - :abbr: NZDT
658
+ :title: New Zealand Daylight Time
659
+ :region: New Zealand
660
+ :dst: true
661
+ :val: 780
662
+ - :abbr: NZST
663
+ :title: New Zealand Standard Time
664
+ :region: New Zealand
665
+ :dst: false
666
+ :val: 720
667
+ - :abbr: OMST
668
+ :title: Omsk Time
669
+ :region: Omsk
670
+ :dst: false
671
+ :val: 360
672
+ - :abbr: ORAT
673
+ :title: Oral Time
674
+ :region: Oral
675
+ :dst: false
676
+ :val: 300
677
+ - :abbr: PDT
678
+ :title: Pacific Daylight Time (North America)
679
+ :region: Pacific
680
+ :dst: true
681
+ :val: -420
682
+ - :abbr: PET
683
+ :title: Peru Time
684
+ :region: Peru
685
+ :dst: false
686
+ :val: -300
687
+ - :abbr: PETT
688
+ :title: Kamchatka Time
689
+ :region: Kamchatka
690
+ :dst: false
691
+ :val: 720
692
+ - :abbr: PGT
693
+ :title: Papua New Guinea Time
694
+ :region: Papua New Guinea
695
+ :dst: false
696
+ :val: 600
697
+ - :abbr: PHOT
698
+ :title: Phoenix Island Time
699
+ :region: Phoenix Island
700
+ :dst: false
701
+ :val: 780
702
+ - :abbr: PKT
703
+ :title: Pakistan Standard Time
704
+ :region: Pakistan
705
+ :dst: false
706
+ :val: 300
707
+ - :abbr: PMDT
708
+ :title: Saint Pierre and Miquelon Daylight time
709
+ :region: Saint Pierre and Miquelon
710
+ :dst: true
711
+ :val: -120
712
+ - :abbr: PMST
713
+ :title: Saint Pierre and Miquelon Standard Time
714
+ :region: Saint Pierre and Miquelon
715
+ :dst: false
716
+ :val: -180
717
+ - :abbr: PONT
718
+ :title: Pohnpei Standard Time
719
+ :region: Pohnpei
720
+ :dst: false
721
+ :val: 660
722
+ - :abbr: PST
723
+ :title: Pacific Standard Time (North America)
724
+ :region: Pacific
725
+ :dst: false
726
+ :val: -480
727
+ - :abbr: PST
728
+ :title: Philippine Standard Time
729
+ :region: Philippine
730
+ :dst: false
731
+ :val: 480
732
+ - :abbr: PYST
733
+ :title: Paraguay Summer Time (South America)
734
+ :region: Paraguay
735
+ :dst: true
736
+ :val: -180
737
+ - :abbr: PYT
738
+ :title: Paraguay Time (South America)
739
+ :region: Paraguay
740
+ :dst: false
741
+ :val: -240
742
+ - :abbr: RET
743
+ :title: Réunion Time
744
+ :region: Réunion
745
+ :dst: false
746
+ :val: 240
747
+ - :abbr: ROTT
748
+ :title: Rothera Research Station Time
749
+ :region: Rothera Research Station
750
+ :dst: false
751
+ :val: -180
752
+ - :abbr: SAKT
753
+ :title: Sakhalin Island time
754
+ :region: Sakhalin Island
755
+ :dst: false
756
+ :val: 660
757
+ - :abbr: SAMT
758
+ :title: Samara Time
759
+ :region: Samara
760
+ :dst: false
761
+ :val: 240
762
+ - :abbr: SAST
763
+ :title: South African Standard Time
764
+ :region: South African
765
+ :dst: false
766
+ :val: 120
767
+ - :abbr: SBT
768
+ :title: Solomon Islands Time
769
+ :region: Solomon Islands
770
+ :dst: false
771
+ :val: 660
772
+ - :abbr: SCT
773
+ :title: Seychelles Time
774
+ :region: Seychelles
775
+ :dst: false
776
+ :val: 240
777
+ - :abbr: SGT
778
+ :title: Singapore Time
779
+ :region: Singapore
780
+ :dst: false
781
+ :val: 480
782
+ - :abbr: SLST
783
+ :title: Sri Lanka Standard Time
784
+ :region: Sri Lanka
785
+ :dst: false
786
+ :val: 330
787
+ - :abbr: SRET
788
+ :title: Srednekolymsk Time
789
+ :region: Srednekolymsk
790
+ :dst: false
791
+ :val: 660
792
+ - :abbr: SRT
793
+ :title: Suriname Time
794
+ :region: Suriname
795
+ :dst: false
796
+ :val: -180
797
+ - :abbr: SST
798
+ :title: Samoa Standard Time
799
+ :region: Samoa
800
+ :dst: false
801
+ :val: -660
802
+ - :abbr: SST
803
+ :title: Singapore Standard Time
804
+ :region: Singapore
805
+ :dst: false
806
+ :val: 480
807
+ - :abbr: SYOT
808
+ :title: Showa Station Time
809
+ :region: Showa Station
810
+ :dst: false
811
+ :val: 180
812
+ - :abbr: TAHT
813
+ :title: Tahiti Time
814
+ :region: Tahiti
815
+ :dst: false
816
+ :val: -600
817
+ - :abbr: TFT
818
+ :title: Indian/Kerguelen Time
819
+ :region: Indian/Kerguelen
820
+ :dst: false
821
+ :val: 300
822
+ - :abbr: THA
823
+ :title: Thailand Standard Time
824
+ :region: Thailand
825
+ :dst: false
826
+ :val: 420
827
+ - :abbr: TJT
828
+ :title: Tajikistan Time
829
+ :region: Tajikistan
830
+ :dst: false
831
+ :val: 300
832
+ - :abbr: TKT
833
+ :title: Tokelau Time
834
+ :region: Tokelau
835
+ :dst: false
836
+ :val: 780
837
+ - :abbr: TLT
838
+ :title: Timor Leste Time
839
+ :region: Timor Leste
840
+ :dst: false
841
+ :val: 540
842
+ - :abbr: TMT
843
+ :title: Turkmenistan Time
844
+ :region: Turkmenistan
845
+ :dst: false
846
+ :val: 300
847
+ - :abbr: TOT
848
+ :title: Tonga Time
849
+ :region: Tonga
850
+ :dst: false
851
+ :val: 780
852
+ - :abbr: TRT
853
+ :title: Turkey Time
854
+ :region: Turkey
855
+ :dst: false
856
+ :val: 180
857
+ - :abbr: TVT
858
+ :title: Tuvalu Time
859
+ :region: Tuvalu
860
+ :dst: false
861
+ :val: 720
862
+ - :abbr: ULAST
863
+ :title: Ulaanbaatar Summer Time
864
+ :region: Ulaanbaatar
865
+ :dst: true
866
+ :val: 540
867
+ - :abbr: ULAT
868
+ :title: Ulaanbaatar Standard Time
869
+ :region: Ulaanbaatar
870
+ :dst: false
871
+ :val: 480
872
+ - :abbr: USZ1
873
+ :title: Kaliningrad Time
874
+ :region: Kaliningrad
875
+ :dst: false
876
+ :val: 120
877
+ - :abbr: UYST
878
+ :title: Uruguay Summer Time
879
+ :region: Uruguay
880
+ :dst: true
881
+ :val: -120
882
+ - :abbr: UYT
883
+ :title: Uruguay Standard Time
884
+ :region: Uruguay
885
+ :dst: false
886
+ :val: -180
887
+ - :abbr: UZT
888
+ :title: Uzbekistan Time
889
+ :region: Uzbekistan
890
+ :dst: false
891
+ :val: 300
892
+ - :abbr: VET
893
+ :title: Venezuelan Standard Time
894
+ :region: Venezuelan
895
+ :dst: false
896
+ :val: -240
897
+ - :abbr: VLAT
898
+ :title: Vladivostok Time
899
+ :region: Vladivostok
900
+ :dst: false
901
+ :val: 600
902
+ - :abbr: VOLT
903
+ :title: Volgograd Time
904
+ :region: Volgograd
905
+ :dst: false
906
+ :val: 240
907
+ - :abbr: VOST
908
+ :title: Vostok Station Time
909
+ :region: Vostok Station
910
+ :dst: false
911
+ :val: 360
912
+ - :abbr: VUT
913
+ :title: Vanuatu Time
914
+ :region: Vanuatu
915
+ :dst: false
916
+ :val: 660
917
+ - :abbr: WAKT
918
+ :title: Wake Island Time
919
+ :region: Wake Island
920
+ :dst: false
921
+ :val: 720
922
+ - :abbr: WAST
923
+ :title: West Africa Summer Time
924
+ :region: West Africa
925
+ :dst: true
926
+ :val: 120
927
+ - :abbr: WAT
928
+ :title: West Africa Time
929
+ :region: West Africa
930
+ :dst: false
931
+ :val: 60
932
+ - :abbr: WEST
933
+ :title: Western European Summer Time
934
+ :region: Western European
935
+ :dst: true
936
+ :val: 60
937
+ - :abbr: WET
938
+ :title: Western European Time
939
+ :region: Western European
940
+ :dst: false
941
+ :val: 0
942
+ - :abbr: WIT
943
+ :title: Western Indonesian Time
944
+ :region: Western Indonesian
945
+ :dst: false
946
+ :val: 420
947
+ - :abbr: WST
948
+ :title: Western Standard Time
949
+ :region: Western
950
+ :dst: false
951
+ :val: 480
952
+ - :abbr: YAKT
953
+ :title: Yakutsk Time
954
+ :region: Yakutsk
955
+ :dst: false
956
+ :val: 540
957
+ - :abbr: YEKT
958
+ :title: Yekaterinburg Time
959
+ :region: Yekaterinburg
960
+ :dst: false
961
+ :val: 300