mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[ruby/date] Add more timezone abbreviations
This gets the time zone abbreviations from https://www.timeanddate.com/time/zones/, and adds unambiguous time zones not already present in zonetab.list. See bin/update-abbr for the program used. This regenerates zonetab.h using prereq.mk (requires gperf). Only one test line is added, just to make sure a new time zone abbreviation is picked up. Fixes Ruby Bug 16286 https://github.com/ruby/date/commit/702e8b3033
This commit is contained in:
parent
51825c04db
commit
469545307f
4 changed files with 1553 additions and 746 deletions
35
bin/update-abbr
Normal file
35
bin/update-abbr
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
require 'nokogiri'
|
||||||
|
require 'open-uri'
|
||||||
|
|
||||||
|
doc = Nokogiri::HTML(URI.open('https://www.timeanddate.com/time/zones/'))
|
||||||
|
|
||||||
|
h = {}
|
||||||
|
|
||||||
|
doc.css('#tz-abb tbody tr').each do |tr|
|
||||||
|
tds = tr.css('td')
|
||||||
|
abbr = tds[0].text.strip.downcase
|
||||||
|
offset = tds[3].text.strip.gsub(/UTC\s*/, '')
|
||||||
|
next if offset.include?('/') # skip ambiguous timezones
|
||||||
|
next if offset.empty?
|
||||||
|
|
||||||
|
|
||||||
|
hour, min = offset.split(':', 2)
|
||||||
|
offset = (Integer(hour) * 60 + (Integer(min || 0)))*60
|
||||||
|
if h.has_key?(abbr)
|
||||||
|
h[abbr] = false
|
||||||
|
else
|
||||||
|
h[abbr] = offset
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
h.delete_if{|_,v| !v}
|
||||||
|
|
||||||
|
lines = File.readlines('ext/date/zonetab.list')
|
||||||
|
lines.select{|l| l.include?(',')}.
|
||||||
|
map{|l| l.split(',', 2)[0]}.
|
||||||
|
each{|a| h.delete(a)}
|
||||||
|
|
||||||
|
h.sort.map{|k,v| "#{k},#{v}"}
|
||||||
|
lines.insert(-2, h.sort.map{|k,v| "#{k},#{v}\n"})
|
||||||
|
lines.flatten!
|
||||||
|
File.write('ext/date/zonetab.list', lines.join)
|
2117
ext/date/zonetab.h
2117
ext/date/zonetab.h
File diff suppressed because it is too large
Load diff
|
@ -178,4 +178,150 @@ w. europe, 3600
|
||||||
west asia, 18000
|
west asia, 18000
|
||||||
west pacific, 36000
|
west pacific, 36000
|
||||||
yakutsk, 32400
|
yakutsk, 32400
|
||||||
|
acdt,37800
|
||||||
|
acst,34200
|
||||||
|
act,-18000
|
||||||
|
acwst,31500
|
||||||
|
aedt,39600
|
||||||
|
aest,36000
|
||||||
|
aft,16200
|
||||||
|
almt,21600
|
||||||
|
anast,43200
|
||||||
|
anat,43200
|
||||||
|
aoe,-43200
|
||||||
|
aqtt,18000
|
||||||
|
awdt,32400
|
||||||
|
awst,28800
|
||||||
|
azost,0
|
||||||
|
azot,-3600
|
||||||
|
azst,18000
|
||||||
|
azt,14400
|
||||||
|
bnt,28800
|
||||||
|
bot,-14400
|
||||||
|
btt,21600
|
||||||
|
cast,28800
|
||||||
|
chadt,49500
|
||||||
|
chast,45900
|
||||||
|
chost,32400
|
||||||
|
chot,28800
|
||||||
|
chst,36000
|
||||||
|
chut,36000
|
||||||
|
cidst,-14400
|
||||||
|
cist,-18000
|
||||||
|
ckt,-36000
|
||||||
|
cot,-18000
|
||||||
|
cvt,-3600
|
||||||
|
cxt,25200
|
||||||
|
davt,25200
|
||||||
|
ddut,36000
|
||||||
|
easst,-18000
|
||||||
|
ect,-18000
|
||||||
|
egst,0
|
||||||
|
egt,-3600
|
||||||
|
fet,10800
|
||||||
|
fjst,46800
|
||||||
|
fjt,43200
|
||||||
|
fkst,-10800
|
||||||
|
fkt,-14400
|
||||||
|
fnt,-7200
|
||||||
|
galt,-21600
|
||||||
|
gamt,-32400
|
||||||
|
get,14400
|
||||||
|
gft,-10800
|
||||||
|
gilt,43200
|
||||||
|
gyt,-14400
|
||||||
|
hkt,28800
|
||||||
|
hovst,28800
|
||||||
|
hovt,25200
|
||||||
|
ict,25200
|
||||||
|
idt,10800
|
||||||
|
iot,21600
|
||||||
|
irdt,16200
|
||||||
|
irkst,32400
|
||||||
|
irkt,28800
|
||||||
|
irst,12600
|
||||||
|
kgt,21600
|
||||||
|
kost,39600
|
||||||
|
krast,28800
|
||||||
|
krat,25200
|
||||||
|
kuyt,14400
|
||||||
|
lhdt,39600
|
||||||
|
lhst,37800
|
||||||
|
lint,50400
|
||||||
|
magst,43200
|
||||||
|
magt,39600
|
||||||
|
mart,-30600
|
||||||
|
mawt,18000
|
||||||
|
mht,43200
|
||||||
|
mmt,23400
|
||||||
|
mut,14400
|
||||||
|
mvt,18000
|
||||||
|
myt,28800
|
||||||
|
nct,39600
|
||||||
|
nfdt,43200
|
||||||
|
nft,39600
|
||||||
|
novst,25200
|
||||||
|
novt,25200
|
||||||
|
npt,20700
|
||||||
|
nrt,43200
|
||||||
|
nut,-39600
|
||||||
|
omsst,25200
|
||||||
|
omst,21600
|
||||||
|
orat,18000
|
||||||
|
pet,-18000
|
||||||
|
petst,43200
|
||||||
|
pett,43200
|
||||||
|
pgt,36000
|
||||||
|
phot,46800
|
||||||
|
pht,28800
|
||||||
|
pkt,18000
|
||||||
|
pmdt,-7200
|
||||||
|
pmst,-10800
|
||||||
|
pont,39600
|
||||||
|
pwt,32400
|
||||||
|
pyst,-10800
|
||||||
|
qyzt,21600
|
||||||
|
ret,14400
|
||||||
|
rott,-10800
|
||||||
|
sakt,39600
|
||||||
|
samt,14400
|
||||||
|
sbt,39600
|
||||||
|
sct,14400
|
||||||
|
sret,39600
|
||||||
|
srt,-10800
|
||||||
|
syot,10800
|
||||||
|
taht,-36000
|
||||||
|
tft,18000
|
||||||
|
tjt,18000
|
||||||
|
tkt,46800
|
||||||
|
tlt,32400
|
||||||
|
tmt,18000
|
||||||
|
tost,50400
|
||||||
|
tot,46800
|
||||||
|
trt,10800
|
||||||
|
tvt,43200
|
||||||
|
ulast,32400
|
||||||
|
ulat,28800
|
||||||
|
uyst,-7200
|
||||||
|
uyt,-10800
|
||||||
|
uzt,18000
|
||||||
|
vet,-14400
|
||||||
|
vlast,39600
|
||||||
|
vlat,36000
|
||||||
|
vost,21600
|
||||||
|
vut,39600
|
||||||
|
wakt,43200
|
||||||
|
warst,-10800
|
||||||
|
wft,43200
|
||||||
|
wgst,-7200
|
||||||
|
wgt,-10800
|
||||||
|
wib,25200
|
||||||
|
wit,32400
|
||||||
|
wita,28800
|
||||||
|
wt,0
|
||||||
|
yakst,36000
|
||||||
|
yakt,32400
|
||||||
|
yapt,36000
|
||||||
|
yekst,21600
|
||||||
|
yekt,18000
|
||||||
%%
|
%%
|
||||||
|
|
|
@ -24,6 +24,7 @@ class TestDateParse < Test::Unit::TestCase
|
||||||
[['Sat Aug 28 02:29:34 JST 02',true],[2002,8,28,2,29,34,'JST',9*3600,6], __LINE__],
|
[['Sat Aug 28 02:29:34 JST 02',true],[2002,8,28,2,29,34,'JST',9*3600,6], __LINE__],
|
||||||
[['Sat Aug 28 02:29:34 JST 0002',false],[2,8,28,2,29,34,'JST',9*3600,6], __LINE__],
|
[['Sat Aug 28 02:29:34 JST 0002',false],[2,8,28,2,29,34,'JST',9*3600,6], __LINE__],
|
||||||
[['Sat Aug 28 02:29:34 JST 0002',true],[2,8,28,2,29,34,'JST',9*3600,6], __LINE__],
|
[['Sat Aug 28 02:29:34 JST 0002',true],[2,8,28,2,29,34,'JST',9*3600,6], __LINE__],
|
||||||
|
[['Sat Aug 28 02:29:34 AEST 0002',true],[2,8,28,2,29,34,'AEST',10*3600,6], __LINE__],
|
||||||
|
|
||||||
[['Sat Aug 28 02:29:34 GMT+09 0002',false],[2,8,28,2,29,34,'GMT+09',9*3600,6], __LINE__],
|
[['Sat Aug 28 02:29:34 GMT+09 0002',false],[2,8,28,2,29,34,'GMT+09',9*3600,6], __LINE__],
|
||||||
[['Sat Aug 28 02:29:34 GMT+0900 0002',false],[2,8,28,2,29,34,'GMT+0900',9*3600,6], __LINE__],
|
[['Sat Aug 28 02:29:34 GMT+0900 0002',false],[2,8,28,2,29,34,'GMT+0900',9*3600,6], __LINE__],
|
||||||
|
|
Loading…
Reference in a new issue