build: generate timezone offsets too in zoneinfo2lua.pl
authorJo-Philipp Wich <jow@openwrt.org>
Sat, 6 Dec 2008 03:18:14 +0000 (03:18 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Sat, 6 Dec 2008 03:18:14 +0000 (03:18 +0000)
libs/http: drop zoneinfo information in luci.http.protocol.data, use luci.sys.zoneinfo instead
libs/sys: refresh zoneinfo information

build/zoneinfo2lua.pl
libs/http/luasrc/http/protocol/date.lua
libs/sys/luasrc/sys/zoneinfo.lua

index fdcc3d60ec7c0a4dfa2feec32a1a28d1724b6258..7e772c0aff39c1d52dfd536e8d00a699b31ae8b2 100644 (file)
@@ -65,4 +65,74 @@ foreach my $zone ( sort keys %TZ ) {
        printf "\t{ '%s', '%s' },\n", $zone, $TZ{$zone}
 }
 
+print <<HEAD;
+}
+
+OFFSET = {
+HEAD
+
+my %seen;
+foreach my $tz ( sort keys %TZ ) {
+       my $zone = $TZ{$tz};
+
+       if( $zone =~ /^
+               ([A-Z]+)
+               (?:
+                       ( -? \d+ (?: : \d+ )? )
+                       (?:
+                               ([A-Z]+)
+                               ( -? \d+ (?: : \d+ )? )? 
+                       )?
+               )?
+       \b /xo ) {
+               my ( $offset, $s, $h, $m ) = ( 0, 1, 0, 0 );
+               my ( $std, $soffset, $dst, $doffset ) = ( $1, $2, $3, $4 );
+
+               next if $seen{$std}; # and ( !$dst or $seen{$dst} );
+
+               if ( $soffset ) {
+                       ( $s, $h, $m ) = $soffset =~ /^(-)?(\d+)(?::(\d+))?$/;
+
+                       $s = $s ? 1 : -1;
+                       $h ||= 0;
+                       $m ||= 0;
+
+                       $offset  = $s * $h * 60 * 60;
+                       $offset += $s * $m * 60;
+
+                       printf("\t%-5s = %6d,\t-- %s\n",
+                               lc($std), $offset, $std);
+
+                       $seen{$std} = 1;
+
+                       if( $dst ) {
+                               if( $doffset ) {
+                                       ( $s, $h, $m ) = $doffset =~ /^(-)?(\d+)(?::(\d+))?$/;
+
+                                       $s = $s ? 1 : -1;
+                                       $h ||= 0;
+                                       $m ||= 0;
+
+                                       $offset  = $s * $h * 60 * 60;
+                                       $offset += $s * $m * 60;
+                               } else  {
+                                       $offset += 60 * 60;
+                               }
+
+                               printf("\t%-5s = %6d,\t-- %s\n",
+                                       lc($dst), $offset, $dst);
+       
+                               $seen{$dst} = 1;
+                       }
+               }
+               else {
+                       printf("\t%-5s = %6d,\t-- %s\n",
+                               lc($std), $offset, $std);
+
+                       $seen{$std} = 1;
+               }
+
+       }
+}
+
 print "}\n";
index 24da1bafbba4b157b87ef4c015be8bc25b946c4b..83d11e2c25c1a6bdba6e5dd54f0f0adb8ce1876a 100644 (file)
@@ -17,116 +17,14 @@ $Id$
 -- This class contains functions to parse, compare and format http dates.
 module("luci.http.protocol.date", package.seeall)
 
+require("luci.sys.zoneinfo")
+
+
 MONTHS = {
        "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug",
        "Sep", "Oct", "Nov", "Dec"
 }
 
---- The "TZ" table contains lowercased timezone names associated with their
--- corresponding time offsets sepcified in seconds.
--- @class table
-TZ = {
-       -- DST zones
-       ["brst"]  =   -2*3600;   -- Brazil Summer Time (East Daylight)
-       ["adt"]   =   -3*3600;   -- Atlantic Daylight
-       ["edt"]   =   -4*3600;   -- Eastern Daylight
-       ["cdt"]   =   -5*3600;   -- Central Daylight
-       ["mdt"]   =   -6*3600;   -- Mountain Daylight
-       ["pdt"]   =   -7*3600;   -- Pacific Daylight
-       ["ydt"]   =   -8*3600;   -- Yukon Daylight
-       ["hdt"]   =   -9*3600;   -- Hawaii Daylight
-       ["bst"]   =    1*3600;   -- British Summer
-       ["mest"]  =    2*3600;   -- Middle European Summer
-       ["sst"]   =    2*3600;   -- Swedish Summer
-       ["fst"]   =    2*3600;   -- French Summer
-       ["eest"]  =    3*3600;   -- Eastern European Summer
-       ["cest"]  =    2*3600;   -- Central European Daylight
-       ["wadt"]  =    8*3600;   -- West Australian Daylight
-       ["kdt"]   =   10*3600;   -- Korean Daylight
-       ["eadt"]  =   11*3600;   -- Eastern Australian Daylight
-       ["nzdt"]  =   13*3600;   -- New Zealand Daylight
-
-       -- zones
-       ["gmt"]   =   0;                 -- Greenwich Mean
-       ["ut"]    =   0;                 -- Universal (Coordinated)
-       ["utc"]   =   0;
-       ["wet"]   =   0;                 -- Western European
-       ["wat"]   =  -1*3600;    -- West Africa
-       ["azost"] =  -1*3600;    -- Azores Standard Time
-       ["cvt"]   =  -1*3600;    -- Cape Verde Time
-       ["at"]    =  -2*3600;    -- Azores
-       ["fnt"]   =  -2*3600;    -- Brazil Time (Extreme East - Fernando Noronha)
-       ["ndt"]   =  -2*3600+1800;-- Newfoundland Daylight
-       ["art"]   =  -3*3600;    -- Argentina Time
-       ["nft"]   =  -3*3600+1800;-- Newfoundland
-       ["mnt"]   =  -4*3600;    -- Brazil Time (West Standard - Manaus)
-       ["ewt"]   =  -4*3600;    -- U.S. Eastern War Time
-       ["ast"]   =  -4*3600;    -- Atlantic Standard
-       ["bot"]   =  -4*3600;    -- Bolivia Time
-       ["vet"]   =  -4*3600;    -- Venezuela Time
-       ["est"]   =  -5*3600;    -- Eastern Standard
-       ["cot"]   =  -5*3600;    -- Colombia Time
-       ["act"]   =  -5*3600;    -- Brazil Time (Extreme West - Acre)
-       ["pet"]   =  -5*3600;    -- Peru Time
-       ["cst"]   =  -6*3600;    -- Central Standard
-       ["cest"]  =   2*3600;    -- Central European Summer
-       ["mst"]   =  -7*3600;    -- Mountain Standard
-       ["pst"]   =  -8*3600;    -- Pacific Standard
-       ["yst"]   =  -9*3600;    -- Yukon Standard
-       ["hst"]   = -10*3600;    -- Hawaii Standard
-       ["cat"]   = -10*3600;    -- Central Alaska
-       ["ahst"]  = -10*3600;    -- Alaska-Hawaii Standard
-       ["taht"]  = -10*3600;    -- Tahiti Time
-       ["nt"]    = -11*3600;    -- Nome
-       ["idlw"]  = -12*3600;    -- International Date Line West
-       ["cet"]   =   1*3600;    -- Central European
-       ["mez"]   =   1*3600;    -- Central European (German)
-       ["met"]   =   1*3600;    -- Middle European
-       ["mewt"]  =   1*3600;    -- Middle European Winter
-       ["swt"]   =   1*3600;    -- Swedish Winter
-       ["set"]   =   1*3600;    -- Seychelles
-       ["fwt"]   =   1*3600;    -- French Winter
-       ["west"]  =   1*3600;    -- Western Europe Summer Time
-       ["eet"]   =   2*3600;    -- Eastern Europe; USSR Zone 1
-       ["ukr"]   =   2*3600;    -- Ukraine
-       ["sast"]  =   2*3600;    -- South Africa Standard Time
-       ["bt"]    =   3*3600;    -- Baghdad; USSR Zone 2
-       ["eat"]   =   3*3600;    -- East Africa Time
-       ["irst"]  =   3*3600+1800;-- Iran Standard Time
-       ["zp4"]   =   4*3600;    -- USSR Zone 3
-       ["msd"]   =   4*3600;    -- Moscow Daylight Time
-       ["sct"]   =   4*3600;    -- Seychelles Time
-       ["zp5"]   =   5*3600;    -- USSR Zone 4
-       ["azst"]  =   5*3600;    -- Azerbaijan Summer Time
-       ["mvt"]   =   5*3600;    -- Maldives Time
-       ["uzt"]   =   5*3600;    -- Uzbekistan Time
-       ["ist"]   =   5*3600+1800;-- Indian Standard
-       ["zp6"]   =   6*3600;    -- USSR Zone 5
-       ["lkt"]   =   6*3600;    -- Sri Lanka Time
-       ["pkst"]  =   6*3600;    -- Pakistan Summer Time
-       ["yekst"] =   6*3600;    -- Yekaterinburg Summer Time
-       ["wast"]  =   7*3600;    -- West Australian Standard
-       ["ict"]   =   7*3600;    -- Indochina Time
-       ["wit"]   =   7*3600;    -- Western Indonesia Time
-       ["cct"]   =   8*3600;    -- China Coast; USSR Zone 7
-       ["wst"]   =   8*3600;    -- West Australian Standard
-       ["hkt"]   =   8*3600;    -- Hong Kong
-       ["bnt"]   =   8*3600;    -- Brunei Darussalam Time
-       ["cit"]   =   8*3600;    -- Central Indonesia Time
-       ["myt"]   =   8*3600;    -- Malaysia Time
-       ["pht"]   =   8*3600;    -- Philippines Time
-       ["sgt"]   =   8*3600;    -- Singapore Time
-       ["jst"]   =   9*3600;    -- Japan Standard; USSR Zone 8
-       ["kst"]   =   9*3600;    -- Korean Standard
-       ["east"]  =  10*3600;    -- Eastern Australian Standard
-       ["gst"]   =  10*3600;    -- Guam Standard; USSR Zone 9
-       ["nct"]   =  11*3600;    -- New Caledonia Time
-       ["nzt"]   =  12*3600;    -- New Zealand
-       ["nzst"]  =  12*3600;    -- New Zealand Standard
-       ["fjt"]   =  12*3600;    -- Fiji Time
-       ["idle"]  =  12*3600;    -- International Date Line East
-}
-
 --- Return the time offset in seconds between the UTC and given time zone.
 -- @param tz   Symbolic or numeric timezone specifier
 -- @return             Time offset to UTC in seconds
@@ -143,8 +41,8 @@ function tz_offset(tz)
                        return s * 60 * ( math.floor( v / 100 ) * 60 + ( v % 100 ) )
 
                -- lookup symbolic tz
-               elseif TZ[tz:lower()] then
-                       return TZ[tz:lower()]
+               elseif luci.sys.zoneinfo.OFFSET[tz:lower()] then
+                       return luci.sys.zoneinfo.OFFSET[tz:lower()]
                end
 
        end
index 7bd02d93478f6e17b760f578897703d3c69b8c35..d6de704257a10407c88f16bf3c0d95e759f91560 100644 (file)
@@ -67,17 +67,18 @@ TZ = {
        { 'America/Anguilla', 'AST4' },
        { 'America/Antigua', 'AST4' },
        { 'America/Araguaina', 'BRT3' },
-       { 'America/Argentina/Buenos Aires', 'ART3ARST,M10.1.0/0,M3.3.0/0' },
-       { 'America/Argentina/Catamarca', 'ART3ARST,M10.1.0/0,M3.3.0/0' },
-       { 'America/Argentina/Cordoba', 'ART3ARST,M10.1.0/0,M3.3.0/0' },
-       { 'America/Argentina/Jujuy', 'ART3ARST,M10.1.0/0,M3.3.0/0' },
-       { 'America/Argentina/La Rioja', 'ART3ARST,M10.1.0/0,M3.3.0/0' },
-       { 'America/Argentina/Mendoza', 'ART3ARST,M10.1.0/0,M3.3.0/0' },
-       { 'America/Argentina/Rio Gallegos', 'ART3ARST,M10.1.0/0,M3.3.0/0' },
-       { 'America/Argentina/San Juan', 'ART3ARST,M10.1.0/0,M3.3.0/0' },
+       { 'America/Argentina/Buenos Aires', 'ART3ARST,M10.3.0/0,M3.3.0/0' },
+       { 'America/Argentina/Catamarca', 'ART3' },
+       { 'America/Argentina/Cordoba', 'ART3ARST,M10.3.0/0,M3.3.0/0' },
+       { 'America/Argentina/Jujuy', 'ART3' },
+       { 'America/Argentina/La Rioja', 'ART3' },
+       { 'America/Argentina/Mendoza', 'ART3' },
+       { 'America/Argentina/Rio Gallegos', 'ART3' },
+       { 'America/Argentina/Salta', 'ART3' },
+       { 'America/Argentina/San Juan', 'ART3' },
        { 'America/Argentina/San Luis', 'ART3' },
-       { 'America/Argentina/Tucuman', 'ART3ARST,M10.1.0/0,M3.3.0/0' },
-       { 'America/Argentina/Ushuaia', 'ART3ARST,M10.1.0/0,M3.3.0/0' },
+       { 'America/Argentina/Tucuman', 'ART3ARST,M10.3.0/0,M3.3.0/0' },
+       { 'America/Argentina/Ushuaia', 'ART3' },
        { 'America/Aruba', 'AST4' },
        { 'America/Asuncion', 'PYT4PYST,M10.3.0/0,M3.2.0/0' },
        { 'America/Atikokan', 'EST5' },
@@ -90,7 +91,7 @@ TZ = {
        { 'America/Bogota', 'COT5' },
        { 'America/Boise', 'MST7MDT,M3.2.0,M11.1.0' },
        { 'America/Cambridge Bay', 'MST7MDT,M3.2.0,M11.1.0' },
-       { 'America/Campo Grande', 'AMT4AMST,M10.2.0/0,M2.3.0/0' },
+       { 'America/Campo Grande', 'AMT4AMST,M10.3.0/0,M2.3.0/0' },
        { 'America/Cancun', 'CST6CDT,M4.1.0,M10.5.0' },
        { 'America/Caracas', 'VET4:30' },
        { 'America/Cayenne', 'GFT3' },
@@ -98,7 +99,7 @@ TZ = {
        { 'America/Chicago', 'CST6CDT,M3.2.0,M11.1.0' },
        { 'America/Chihuahua', 'MST7MDT,M4.1.0,M10.5.0' },
        { 'America/Costa Rica', 'CST6' },
-       { 'America/Cuiaba', 'AMT4AMST,M10.2.0/0,M2.3.0/0' },
+       { 'America/Cuiaba', 'AMT4AMST,M10.3.0/0,M2.3.0/0' },
        { 'America/Curacao', 'AST4' },
        { 'America/Danmarkshavn', 'GMT0' },
        { 'America/Dawson', 'PST8PDT,M3.2.0,M11.1.0' },
@@ -176,7 +177,7 @@ TZ = {
        { 'America/Rio Branco', 'AMT4' },
        { 'America/Santarem', 'BRT3' },
        { 'America/Santo Domingo', 'AST4' },
-       { 'America/Sao Paulo', 'BRT3BRST,M10.2.0/0,M2.3.0/0' },
+       { 'America/Sao Paulo', 'BRT3BRST,M10.3.0/0,M2.3.0/0' },
        { 'America/Scoresbysund', 'EGT1EGST,M3.5.0/0,M10.5.0/1' },
        { 'America/Shiprock', 'MST7MDT,M3.2.0,M11.1.0' },
        { 'America/St Barthelemy', 'AST4' },
@@ -224,12 +225,12 @@ TZ = {
        { 'Asia/Choibalsan', 'CHOT-8' },
        { 'Asia/Chongqing', 'CST-8' },
        { 'Asia/Colombo', 'IST-5:30' },
-       { 'Asia/Damascus', 'EET-2EEST,M4.1.5/0,J274/0' },
+       { 'Asia/Damascus', 'EET-2EEST,M4.1.5/0,J305/0' },
        { 'Asia/Dhaka', 'BDT-6' },
        { 'Asia/Dili', 'TLT-9' },
        { 'Asia/Dubai', 'GST-4' },
        { 'Asia/Dushanbe', 'TJT-5' },
-       { 'Asia/Gaza', 'EET-2EEST,J91/0,M9.2.4' },
+       { 'Asia/Gaza', 'EET-2EEST,J91/0,M8.5.4' },
        { 'Asia/Harbin', 'CST-8' },
        { 'Asia/Ho Chi Minh', 'ICT-7' },
        { 'Asia/Hong Kong', 'HKT-8' },
@@ -365,7 +366,7 @@ TZ = {
        { 'Indian/Kerguelen', 'TFT-5' },
        { 'Indian/Mahe', 'SCT-4' },
        { 'Indian/Maldives', 'MVT-5' },
-       { 'Indian/Mauritius', 'MUT-4' },
+       { 'Indian/Mauritius', 'MUT-4MUST,M10.5.0,M3.5.0/3' },
        { 'Indian/Mayotte', 'EAT-3' },
        { 'Indian/Reunion', 'RET-4' },
        { 'Pacific/Apia', 'WST11' },
@@ -406,3 +407,166 @@ TZ = {
        { 'Pacific/Wake', 'WAKT-12' },
        { 'Pacific/Wallis', 'WFT-12' },
 }
+
+OFFSET = {
+       gmt   =      0, -- GMT
+       eat   =  10800, -- EAT
+       cet   =   3600, -- CET
+       wat   =   3600, -- WAT
+       cat   =   7200, -- CAT
+       wet   =      0, -- WET
+       sast  =   7200, -- SAST
+       eet   =   7200, -- EET
+       hast  = -36000, -- HAST
+       hadt  = -32400, -- HADT
+       akst  = -32400, -- AKST
+       akdt  = -28800, -- AKDT
+       ast   = -14400, -- AST
+       brt   = -10800, -- BRT
+       art   = -10800, -- ART
+       arst  =  -7200, -- ARST
+       pyt   = -14400, -- PYT
+       pyst  = -10800, -- PYST
+       est   = -18000, -- EST
+       cst   = -21600, -- CST
+       amt   = -14400, -- AMT
+       cot   = -18000, -- COT
+       mst   = -25200, -- MST
+       mdt   = -21600, -- MDT
+       vet   = -16200, -- VET
+       gft   = -10800, -- GFT
+       pst   = -28800, -- PST
+       pdt   = -25200, -- PDT
+       ect   = -18000, -- ECT
+       gyt   = -14400, -- GYT
+       bot   = -14400, -- BOT
+       pet   = -18000, -- PET
+       pmst  = -10800, -- PMST
+       pmdt  =  -7200, -- PMDT
+       uyt   = -10800, -- UYT
+       uyst  =  -7200, -- UYST
+       fnt   =  -7200, -- FNT
+       srt   = -10800, -- SRT
+       egt   =  -3600, -- EGT
+       egst  =      0, -- EGST
+       nst   = -12600, -- NST
+       ndt   =  -9000, -- NDT
+       wst   =  28800, -- WST
+       davt  =  25200, -- DAVT
+       ddut  =  36000, -- DDUT
+       mawt  =  21600, -- MAWT
+       nzst  =  43200, -- NZST
+       nzdt  =  46800, -- NZDT
+       rott  = -10800, -- ROTT
+       syot  =  10800, -- SYOT
+       vost  =  21600, -- VOST
+       almt  =  21600, -- ALMT
+       anat  =  43200, -- ANAT
+       anast =  46800, -- ANAST
+       aqtt  =  18000, -- AQTT
+       tmt   =  18000, -- TMT
+       azt   =  14400, -- AZT
+       azst  =  18000, -- AZST
+       ict   =  25200, -- ICT
+       kgt   =  21600, -- KGT
+       bnt   =  28800, -- BNT
+       chot  =  28800, -- CHOT
+       ist   =  19800, -- IST
+       bdt   =  21600, -- BDT
+       tlt   =  32400, -- TLT
+       gst   =  14400, -- GST
+       tjt   =  18000, -- TJT
+       hkt   =  28800, -- HKT
+       hovt  =  25200, -- HOVT
+       irkt  =  28800, -- IRKT
+       irkst =  32400, -- IRKST
+       wit   =  25200, -- WIT
+       eit   =  32400, -- EIT
+       aft   =  16200, -- AFT
+       pett  =  43200, -- PETT
+       petst =  46800, -- PETST
+       pkt   =  18000, -- PKT
+       npt   =  20700, -- NPT
+       krat  =  25200, -- KRAT
+       krast =  28800, -- KRAST
+       myt   =  28800, -- MYT
+       magt  =  39600, -- MAGT
+       magst =  43200, -- MAGST
+       cit   =  28800, -- CIT
+       pht   =  28800, -- PHT
+       novt  =  21600, -- NOVT
+       novst =  25200, -- NOVST
+       omst  =  21600, -- OMST
+       omsst =  25200, -- OMSST
+       orat  =  18000, -- ORAT
+       kst   =  32400, -- KST
+       qyzt  =  21600, -- QYZT
+       mmt   =  23400, -- MMT
+       sakt  =  36000, -- SAKT
+       sakst =  39600, -- SAKST
+       uzt   =  18000, -- UZT
+       sgt   =  28800, -- SGT
+       get   =  14400, -- GET
+       btt   =  21600, -- BTT
+       jst   =  32400, -- JST
+       ulat  =  28800, -- ULAT
+       vlat  =  36000, -- VLAT
+       vlast =  39600, -- VLAST
+       yakt  =  32400, -- YAKT
+       yakst =  36000, -- YAKST
+       yekt  =  18000, -- YEKT
+       yekst =  21600, -- YEKST
+       azot  =  -3600, -- AZOT
+       azost =      0, -- AZOST
+       cvt   =  -3600, -- CVT
+       fkt   = -14400, -- FKT
+       fkst  = -10800, -- FKST
+       cwst  =  31500, -- CWST
+       lhst  =  37800, -- LHST
+       lhst  =  39600, -- LHST
+       msk   =  10800, -- MSK
+       msd   =  14400, -- MSD
+       samt  =  14400, -- SAMT
+       samst =  18000, -- SAMST
+       volt  =  10800, -- VOLT
+       volst =  14400, -- VOLST
+       iot   =  21600, -- IOT
+       cxt   =  25200, -- CXT
+       cct   =  23400, -- CCT
+       tft   =  18000, -- TFT
+       sct   =  14400, -- SCT
+       mvt   =  18000, -- MVT
+       mut   =  14400, -- MUT
+       must  =  18000, -- MUST
+       ret   =  14400, -- RET
+       chast =  45900, -- CHAST
+       chadt =  49500, -- CHADT
+       vut   =  39600, -- VUT
+       phot  =  46800, -- PHOT
+       tkt   = -36000, -- TKT
+       fjt   =  43200, -- FJT
+       tvt   =  43200, -- TVT
+       galt  = -21600, -- GALT
+       gamt  = -32400, -- GAMT
+       sbt   =  39600, -- SBT
+       hst   = -36000, -- HST
+       lint  =  50400, -- LINT
+       kost  =  39600, -- KOST
+       mht   =  43200, -- MHT
+       mart  = -34200, -- MART
+       sst   = -39600, -- SST
+       nrt   =  43200, -- NRT
+       nut   = -39600, -- NUT
+       nft   =  41400, -- NFT
+       nct   =  39600, -- NCT
+       pwt   =  32400, -- PWT
+       pont  =  39600, -- PONT
+       pgt   =  36000, -- PGT
+       ckt   = -36000, -- CKT
+       taht  = -36000, -- TAHT
+       gilt  =  43200, -- GILT
+       tot   =  46800, -- TOT
+       trut  =  36000, -- TRUT
+       wakt  =  43200, -- WAKT
+       wft   =  43200, -- WFT
+}