timezone 1.3.4 → 1.3.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/CHANGES.markdown +23 -0
- data/CONTRIBUTING.markdown +10 -6
- data/Rakefile +3 -1
- data/benchmark.rb +16 -29
- data/data/Africa/Algiers +2 -2
- data/data/Africa/Casablanca +12 -10
- data/data/Africa/El_Aaiun +12 -10
- data/data/America/Campo_Grande +1 -40
- data/data/America/Cuiaba +1 -40
- data/data/America/Dawson +2 -38
- data/data/America/Detroit +5 -1
- data/data/America/Edmonton +1 -5
- data/data/America/Indiana/Tell_City +9 -12
- data/data/America/Kentucky/Louisville +4 -4
- data/data/America/Louisville +4 -4
- data/data/America/Nuuk +120 -0
- data/data/America/Sao_Paulo +1 -40
- data/data/America/Vancouver +2 -2
- data/data/America/Whitehorse +2 -38
- data/data/Antarctica/Casey +6 -1
- data/data/Antarctica/Macquarie +56 -1
- data/data/Asia/Chongqing +3 -1
- data/data/Asia/Chungking +3 -1
- data/data/Asia/Gaza +40 -40
- data/data/Asia/Harbin +3 -1
- data/data/Asia/Hebron +40 -40
- data/data/Asia/Hong_Kong +19 -19
- data/data/Asia/Istanbul +22 -36
- data/data/Asia/Seoul +9 -1
- data/data/Asia/Shanghai +3 -1
- data/data/Brazil/East +1 -40
- data/data/Canada/Mountain +1 -5
- data/data/Canada/Pacific +2 -2
- data/data/Canada/Yukon +2 -38
- data/data/Europe/Brussels +2 -2
- data/data/Europe/Budapest +24 -24
- data/data/Europe/Istanbul +22 -36
- data/data/Europe/Kaliningrad +6 -5
- data/data/Europe/Monaco +3 -3
- data/data/Europe/Paris +3 -3
- data/data/Europe/Rome +2 -2
- data/data/Europe/San_Marino +2 -2
- data/data/Europe/Vatican +2 -2
- data/data/Europe/Vienna +2 -2
- data/data/Hongkong +19 -19
- data/data/PRC +3 -1
- data/data/Pacific/Fiji +32 -32
- data/data/Pacific/Norfolk +42 -3
- data/data/ROK +9 -1
- data/data/Turkey +22 -36
- data/data/US/Michigan +5 -1
- data/lib/timezone/loader.rb +6 -3
- data/lib/timezone/parser.rb +28 -14
- data/lib/timezone/version.rb +1 -1
- data/lib/timezone/zone.rb +17 -16
- data/timezone.gemspec +0 -2
- metadata +8 -8
- data/data/US/Pacific-New +0 -189
data/data/Europe/Monaco
CHANGED
data/data/Europe/Paris
CHANGED
data/data/Europe/Rome
CHANGED
data/data/Europe/San_Marino
CHANGED
data/data/Europe/Vatican
CHANGED
data/data/Europe/Vienna
CHANGED
data/data/Hongkong
CHANGED
@@ -1,23 +1,23 @@
|
|
1
1
|
-2056690801:LMT:0:27402
|
2
|
-
|
3
|
-
|
4
|
-
7331400:
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
2
|
+
1155780000:HKT:0:28800
|
3
|
+
9331200:HKST:1:32400
|
4
|
+
7331400:HKWT:1:30600
|
5
|
+
123039000:JST:0:32400
|
6
|
+
13302000:HKT:0:28800
|
7
|
+
19366200:HKST:1:32400
|
8
|
+
11491200:HKT:0:28800
|
9
|
+
19958400:HKST:1:32400
|
10
|
+
13305600:HKT:0:28800
|
11
|
+
15724800:HKST:1:32400
|
12
|
+
13305600:HKT:0:28800
|
13
|
+
18144000:HKST:1:32400
|
14
|
+
13305600:HKT:0:28800
|
15
|
+
18144000:HKST:1:32400
|
16
|
+
13305600:HKT:0:28800
|
17
|
+
18144000:HKST:1:32400
|
18
|
+
13910400:HKT:0:28800
|
19
|
+
18144000:HKST:1:32400
|
20
|
+
13305600:HKT:0:28800
|
21
21
|
18140400:HKST:1:32400
|
22
22
|
12099600:HKT:0:28800
|
23
23
|
19350000:HKST:1:32400
|
data/data/PRC
CHANGED
data/data/Pacific/Fiji
CHANGED
@@ -23,43 +23,43 @@
|
|
23
23
|
6048000:+13:1:46800
|
24
24
|
25401600:+12:0:43200
|
25
25
|
6048000:+13:1:46800
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
6652800:+13:1:46800
|
40
|
-
24796800:+12:0:43200
|
41
|
-
6652800:+13:1:46800
|
42
|
-
25401600:+12:0:43200
|
43
|
-
6048000:+13:1:46800
|
44
|
-
25401600:+12:0:43200
|
45
|
-
6048000:+13:1:46800
|
46
|
-
25401600:+12:0:43200
|
26
|
+
26006400:+12:0:43200
|
27
|
+
5443200:+13:1:46800
|
28
|
+
29635200:+12:0:43200
|
29
|
+
2419200:+13:1:46800
|
30
|
+
26006400:+12:0:43200
|
31
|
+
5443200:+13:1:46800
|
32
|
+
26006400:+12:0:43200
|
33
|
+
5443200:+13:1:46800
|
34
|
+
26006400:+12:0:43200
|
35
|
+
5443200:+13:1:46800
|
36
|
+
26006400:+12:0:43200
|
37
|
+
5443200:+13:1:46800
|
38
|
+
26006400:+12:0:43200
|
47
39
|
6048000:+13:1:46800
|
48
40
|
25401600:+12:0:43200
|
49
|
-
6652800:+13:1:46800
|
50
|
-
24796800:+12:0:43200
|
51
|
-
6652800:+13:1:46800
|
52
|
-
25401600:+12:0:43200
|
53
41
|
6048000:+13:1:46800
|
54
|
-
|
42
|
+
26006400:+12:0:43200
|
43
|
+
5443200:+13:1:46800
|
44
|
+
26006400:+12:0:43200
|
45
|
+
5443200:+13:1:46800
|
46
|
+
26006400:+12:0:43200
|
47
|
+
5443200:+13:1:46800
|
48
|
+
26006400:+12:0:43200
|
49
|
+
5443200:+13:1:46800
|
50
|
+
26006400:+12:0:43200
|
55
51
|
6048000:+13:1:46800
|
56
|
-
|
52
|
+
26006400:+12:0:43200
|
53
|
+
5443200:+13:1:46800
|
54
|
+
26006400:+12:0:43200
|
55
|
+
5443200:+13:1:46800
|
56
|
+
26006400:+12:0:43200
|
57
|
+
5443200:+13:1:46800
|
58
|
+
26006400:+12:0:43200
|
59
|
+
5443200:+13:1:46800
|
60
|
+
26006400:+12:0:43200
|
57
61
|
6048000:+13:1:46800
|
58
62
|
25401600:+12:0:43200
|
59
63
|
6048000:+13:1:46800
|
60
|
-
|
61
|
-
6652800:+13:1:46800
|
62
|
-
24796800:+12:0:43200
|
63
|
-
6652800:+13:1:46800
|
64
|
-
25401600:+12:0:43200
|
64
|
+
26006400:+12:0:43200
|
65
65
|
1:+13:1:46800
|
data/data/Pacific/Norfolk
CHANGED
@@ -1,6 +1,45 @@
|
|
1
1
|
-2177493113:LMT:0:40312
|
2
2
|
1577836792:+1112:0:40320
|
3
3
|
751686120:+1130:0:41400
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
10886400:+1230:1:45000
|
5
|
+
1280966400:+1130:0:41400
|
6
|
+
126405000:+11:0:39600
|
7
|
+
15724800:+12:1:43200
|
8
|
+
15724800:+11:0:39600
|
9
|
+
15724800:+12:1:43200
|
10
|
+
15724800:+11:0:39600
|
11
|
+
15724800:+12:1:43200
|
12
|
+
15724800:+11:0:39600
|
13
|
+
15724800:+12:1:43200
|
14
|
+
15724800:+11:0:39600
|
15
|
+
16329600:+12:1:43200
|
16
|
+
15724800:+11:0:39600
|
17
|
+
15724800:+12:1:43200
|
18
|
+
15724800:+11:0:39600
|
19
|
+
15724800:+12:1:43200
|
20
|
+
15724800:+11:0:39600
|
21
|
+
15724800:+12:1:43200
|
22
|
+
15724800:+11:0:39600
|
23
|
+
15724800:+12:1:43200
|
24
|
+
15724800:+11:0:39600
|
25
|
+
15724800:+12:1:43200
|
26
|
+
16329600:+11:0:39600
|
27
|
+
15724800:+12:1:43200
|
28
|
+
15724800:+11:0:39600
|
29
|
+
15724800:+12:1:43200
|
30
|
+
15724800:+11:0:39600
|
31
|
+
15724800:+12:1:43200
|
32
|
+
15724800:+11:0:39600
|
33
|
+
15724800:+12:1:43200
|
34
|
+
15724800:+11:0:39600
|
35
|
+
15724800:+12:1:43200
|
36
|
+
15724800:+11:0:39600
|
37
|
+
15724800:+12:1:43200
|
38
|
+
16329600:+11:0:39600
|
39
|
+
15724800:+12:1:43200
|
40
|
+
15724800:+11:0:39600
|
41
|
+
15724800:+12:1:43200
|
42
|
+
15724800:+11:0:39600
|
43
|
+
15724800:+12:1:43200
|
44
|
+
15724800:+11:0:39600
|
45
|
+
1:+12:1:43200
|
data/data/ROK
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
-1948782473:LMT:0:30472
|
2
2
|
118367872:KST:0:30600
|
3
3
|
1063063800:JST:0:32400
|
4
|
-
|
4
|
+
86140800:KST:0:32400
|
5
|
+
8982000:KDT:1:36000
|
6
|
+
17456400:KST:0:32400
|
7
|
+
13906800:KDT:1:36000
|
8
|
+
17456400:KST:0:32400
|
9
|
+
13993200:KDT:1:36000
|
10
|
+
20566800:KST:0:32400
|
11
|
+
10882800:KDT:1:36000
|
12
|
+
79837200:KST:0:32400
|
5
13
|
35425800:KST:0:30600
|
6
14
|
10969200:KDT:1:34200
|
7
15
|
21949200:KST:0:30600
|
data/data/Turkey
CHANGED
@@ -12,14 +12,12 @@
|
|
12
12
|
12178800:EEST:1:10800
|
13
13
|
18320400:EET:0:7200
|
14
14
|
13215600:EEST:1:10800
|
15
|
-
|
15
|
+
465440400:EET:0:7200
|
16
16
|
8377200:EEST:1:10800
|
17
|
-
|
17
|
+
4842000:EET:0:7200
|
18
18
|
25398000:EEST:1:10800
|
19
19
|
16592400:EET:0:7200
|
20
|
-
|
21
|
-
76294800:EET:0:7200
|
22
|
-
16326000:EEST:1:10800
|
20
|
+
111106800:EEST:1:10800
|
23
21
|
20394000:EET:0:7200
|
24
22
|
10537200:EEST:1:10800
|
25
23
|
17370000:EET:0:7200
|
@@ -28,44 +26,32 @@
|
|
28
26
|
14511600:EEST:1:10800
|
29
27
|
16333200:EET:0:7200
|
30
28
|
15116400:EEST:1:10800
|
31
|
-
17197200:EET:0:7200
|
32
|
-
14857200:EEST:1:10800
|
33
29
|
16938000:EET:0:7200
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
30
|
+
15116400:EEST:1:10800
|
31
|
+
16938000:EET:0:7200
|
32
|
+
14511600:EEST:1:10800
|
33
|
+
339901200:EET:0:7200
|
34
|
+
40777200:EEST:1:10800
|
35
|
+
17110800:EET:0:7200
|
38
36
|
12006000:EEST:1:10800
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
12700800:EET:0:7200
|
48
|
-
18756000:EEST:1:10800
|
49
|
-
12686400:EET:0:7200
|
50
|
-
18140400:EEST:1:10800
|
51
|
-
18925200:EET:0:7200
|
52
|
-
13129200:EEST:1:10800
|
37
|
+
273636000:EET:0:7200
|
38
|
+
13305600:EEST:1:10800
|
39
|
+
12704400:EET:0:7200
|
40
|
+
18745200:EEST:1:10800
|
41
|
+
12013200:EET:0:7200
|
42
|
+
19436400:EEST:1:10800
|
43
|
+
12099600:EET:0:7200
|
44
|
+
19350000:EEST:1:10800
|
53
45
|
13309200:EET:0:7200
|
54
46
|
16930800:EEST:1:10800
|
55
47
|
14518800:EET:0:7200
|
56
|
-
|
57
|
-
|
58
|
-
15048000:+03:0:10800
|
59
|
-
16401600:+04:1:14400
|
60
|
-
14443200:+03:0:10800
|
61
|
-
17006400:+04:1:14400
|
62
|
-
14443200:+03:0:10800
|
63
|
-
17006400:+04:1:14400
|
64
|
-
25318800:+03:0:10800
|
48
|
+
7592400:EEST:1:10800
|
49
|
+
160538400:+03:0:10800
|
65
50
|
5439600:+04:1:14400
|
66
|
-
|
51
|
+
34218000:+03:0:10800
|
52
|
+
14688000:EET:0:7200
|
67
53
|
13910400:EEST:1:10800
|
68
|
-
|
54
|
+
15811200:EET:0:7200
|
69
55
|
15724800:EEST:1:10800
|
70
56
|
15724800:EET:0:7200
|
71
57
|
15724800:EEST:1:10800
|
data/data/US/Michigan
CHANGED
@@ -5,7 +5,11 @@
|
|
5
5
|
3999600:EPT:1:-14400
|
6
6
|
81046800:EST:0:-18000
|
7
7
|
13302000:EDT:1:-14400
|
8
|
-
|
8
|
+
590540460:EST:0:-18000
|
9
|
+
11840340:EDT:1:-14400
|
10
|
+
15728400:EST:0:-18000
|
11
|
+
15721200:EDT:1:-14400
|
12
|
+
142131600:EST:0:-18000
|
9
13
|
15721200:EDT:1:-14400
|
10
14
|
6051600:EST:0:-18000
|
11
15
|
25398000:EDT:1:-14400
|
data/lib/timezone/loader.rb
CHANGED
@@ -8,12 +8,15 @@ module Timezone # rubocop:disable Style/Documentation
|
|
8
8
|
ZONE_FILE_PATH = File.expand_path(File.dirname(__FILE__) + '/../../data')
|
9
9
|
SOURCE_BIT = 0
|
10
10
|
|
11
|
+
@rules = {} # cache of loaded rules
|
12
|
+
|
11
13
|
class << self
|
12
14
|
def load(name)
|
13
|
-
|
15
|
+
@rules.fetch(name) do
|
16
|
+
raise ::Timezone::Error::InvalidZone unless valid?(name)
|
14
17
|
|
15
|
-
|
16
|
-
|
18
|
+
@rules[name] = parse_zone_data(get_zone_data(name))
|
19
|
+
end
|
17
20
|
end
|
18
21
|
|
19
22
|
def names
|
data/lib/timezone/parser.rb
CHANGED
@@ -11,28 +11,42 @@ module Timezone
|
|
11
11
|
|
12
12
|
LINE = /\s*(.+)\s*=\s*(.+)\s*isdst=(\d+)\s*gmtoff=([\+\-]*\d+)/
|
13
13
|
|
14
|
-
|
14
|
+
# Bookkeeping files that we do not want to parse.
|
15
|
+
IGNORE = ['leapseconds', 'posixrules', 'tzdata.zi'].freeze
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
def initialize(zoneinfo = ZONEINFO_DIR)
|
19
|
-
@zoneinfo = zoneinfo
|
17
|
+
def initialize(root)
|
18
|
+
@config = Config.new(root)
|
20
19
|
end
|
21
20
|
|
22
21
|
def perform
|
23
22
|
FileUtils.rm_rf('data')
|
24
23
|
|
25
|
-
Dir["#{zoneinfo}
|
24
|
+
Dir["#{@config.zoneinfo}/**/*"].each do |file|
|
26
25
|
next if File.directory?(file)
|
26
|
+
next if file.end_with?('.tab')
|
27
|
+
next if IGNORE.include?(File.basename(file))
|
27
28
|
parse(file)
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
32
|
+
# Represents a timezone database config.
|
33
|
+
class Config
|
34
|
+
def initialize(root)
|
35
|
+
@root = root
|
36
|
+
@zoneinfo = File.join(@root, 'usr/share/zoneinfo')
|
37
|
+
@zdump = File.join(@root, 'usr/bin/zdump')
|
38
|
+
end
|
39
|
+
|
40
|
+
attr_reader :root, :zoneinfo, :zdump
|
41
|
+
end
|
42
|
+
|
43
|
+
private_constant :Config
|
44
|
+
|
31
45
|
# Represents a single timezone data file line for a reference timezone.
|
32
46
|
class RefLine
|
33
|
-
def initialize(
|
47
|
+
def initialize(config, file)
|
34
48
|
first =
|
35
|
-
|
49
|
+
`#{config.zdump} -i #{file}`
|
36
50
|
.split("\n")
|
37
51
|
.reject(&:empty?)
|
38
52
|
.reject { |line| line.start_with?('TZ=') }
|
@@ -85,15 +99,15 @@ module Timezone
|
|
85
99
|
private
|
86
100
|
|
87
101
|
def parse(file)
|
88
|
-
zone = file.gsub("#{zoneinfo}/
|
102
|
+
zone = file.gsub("#{@config.zoneinfo}/", '')
|
89
103
|
print "Parsing #{zone}... "
|
90
|
-
data = zdump(
|
104
|
+
data = zdump(file)
|
91
105
|
|
92
106
|
last = 0
|
93
107
|
result = []
|
94
108
|
|
95
109
|
data.split("\n").each do |line|
|
96
|
-
match = line.gsub(
|
110
|
+
match = line.gsub(/^#{file}\s+/, '').match(LINE)
|
97
111
|
next if match.nil?
|
98
112
|
|
99
113
|
line = Line.new(match)
|
@@ -112,14 +126,14 @@ module Timezone
|
|
112
126
|
result << line
|
113
127
|
end
|
114
128
|
|
115
|
-
result << RefLine.new(
|
129
|
+
result << RefLine.new(@config, file) if result.empty?
|
116
130
|
|
117
131
|
write(zone, result)
|
118
132
|
puts 'DONE'
|
119
133
|
end
|
120
134
|
|
121
|
-
def zdump(
|
122
|
-
|
135
|
+
def zdump(file)
|
136
|
+
`#{@config.zdump} -v -c #{MIN_YEAR},#{MAX_YEAR} #{file}`
|
123
137
|
end
|
124
138
|
|
125
139
|
def write(zone, data)
|