如何修改时区data文件
时间:10-02
整理:3721RD
点击:
[Description]
android时区信息是由data文件保存,KK之前的版本是三个文件(zoneinfo.dat, zoneinfo.idx,zoneinfo.version),KK之后只有一个文件(tzdata)。
由于各国的时区信息是会变化的,例如2014年6月13日,俄罗斯宣布从2014年10月26日之后全国时区推后一小时,比如莫斯科之前是GMT+4,修改后是
GMT+3;如某个时区去掉2015年永久取消夏令时;但是android中的该文件不会自动更新,所以测试过程中会遇到手机的时区信息显示不正确。这种情
况下,就需要更新手机的时区信息文件。
[Solution]
一、下载tztada包
在网址ftp://ftp.iana.org/tz/releases/下载tzdata*.tar.gz,对于KK下载2014f版本,如果是KK之前的版本请下载2013年的版本。解压后拷贝到路
径\bionic\libc\tools\zoneinfo下。找到时区所在文件,是按照城市所在洲命名的文件。
1、夏令时(如Mexico在文件northamerica)
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Mexico 1939 only - Feb 5 0:00 1:00 D
Rule Mexico 1939 only - Jun 25 0:00 0 S
Rule Mexico 1940 only - Dec 9 0:00 1:00 D
Rule Mexico 1941 only - Apr 1 0:00 0 S
Rule Mexico 1943 only - Dec 16 0:00 1:00 W # War
Rule Mexico 1944 only - May 1 0:00 0 S
Rule Mexico 1950 only - Feb 12 0:00 1:00 D
Rule Mexico 1950 only - Jul 30 0:00 0 S
Rule Mexico 1996 2000 - Apr Sun>=1 2:00 1:00 D
Rule Mexico 1996 2000 - Oct lastSun 2:00 0 S
Rule Mexico 2001 only - May Sun>=1 2:00 1:00 D
Rule Mexico 2001 only - Sep lastSun 2:00 0 S
Rule Mexico 2002 max - Apr Sun>=1 2:00 1:00 D
Rule Mexico 2002 max - Oct lastSun 2:00 0 S
红色字体1:00表示有夏令时,要加一小时;0表示不用加。前面的时间是执行夏令时的时间段。如果要求2014年开始每年4月1日到10月31日执行夏令
时,其余时间取消夏令时可以新增如下2句:
Rule Mexico 2014 max - Apr 1 2:00 1:00 D
Rule Mexico 2014 max - Oct 31 2:00 0 S
2、时区(如Moscow在文件europe)
Zone Europe/Moscow 2:30:17 - LMT 1880
2:30:17 - MMT 1916 Jul 3 # Moscow Mean Time
2:31:19 Russia %s 1919 Jul 1 2:00
3:00 Russia %s 1921 Oct
3:00 Russia MSK/MSD 1922 Oct
2:00 - EET 1930 Jun 21
3:00 Russia MSK/MSD 1991 Mar 31 2:00s
2:00 Russia EE%sT 1992 Jan 19 2:00s
3:00 Russia MSK/MSD 2011 Mar 27 2:00s
4:00 - MSK 2014 Oct 26 2:00s
3:00 - MSK
新增2014年10月26日之后执行GMT+3时区
3、KK版本需要修改ICU对应的时区信息,比如Moscow
修改文件external\icu\icu4c\data\misc\zoneinfo64.txt(可以参考FAQ04553ICU )
把Moscow时区部分使用下面替换掉,然后参考FAQ04011 重新编译icu资源
/* Europe/Moscow */ :table {
trans:intvector { -1688265017, -1656819079, -1641353479, -1627965079, -1618716679, -1596429079, -1593829879, -1589860800, -
1542427200, -1539493200, -1525323600, -1522728000, -1491188400, -1247536800, 354920400, 370728000, 386456400, 402264000,
417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400,
591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686102400, 695779200, 701812800, 717534000, 733273200,
748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000,
922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400,
1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200,
1256425200, 1269730800, 1288479600, 1301180400, 1414274400 }
typeOffsets:intvector { 9017, 0, 7200, 0, 7200, 3600, 9079, 0, 9079, 3600, 9079, 7200, 10800, 0, 10800, 3600, 10800, 7200, 14400,
0 }
typeMap:bin {
"030403050405070607080706010607060706070607060706070607060706070607060201060706070607060706070607060706070607060706070607060706070
6070607060706070607060906" }
links:intvector { 462, 618 }
}
二、 修改完成后需要执行脚本生成data文件,具体执行可以参考
KK之前的版本:FAQ05710
KK之后的版本(L,M):FAQ12532
三、关于俄罗斯时区的问题
请参考:FAQ13442,FAQ13443
android时区信息是由data文件保存,KK之前的版本是三个文件(zoneinfo.dat, zoneinfo.idx,zoneinfo.version),KK之后只有一个文件(tzdata)。
由于各国的时区信息是会变化的,例如2014年6月13日,俄罗斯宣布从2014年10月26日之后全国时区推后一小时,比如莫斯科之前是GMT+4,修改后是
GMT+3;如某个时区去掉2015年永久取消夏令时;但是android中的该文件不会自动更新,所以测试过程中会遇到手机的时区信息显示不正确。这种情
况下,就需要更新手机的时区信息文件。
[Solution]
一、下载tztada包
在网址ftp://ftp.iana.org/tz/releases/下载tzdata*.tar.gz,对于KK下载2014f版本,如果是KK之前的版本请下载2013年的版本。解压后拷贝到路
径\bionic\libc\tools\zoneinfo下。找到时区所在文件,是按照城市所在洲命名的文件。
1、夏令时(如Mexico在文件northamerica)
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Mexico 1939 only - Feb 5 0:00 1:00 D
Rule Mexico 1939 only - Jun 25 0:00 0 S
Rule Mexico 1940 only - Dec 9 0:00 1:00 D
Rule Mexico 1941 only - Apr 1 0:00 0 S
Rule Mexico 1943 only - Dec 16 0:00 1:00 W # War
Rule Mexico 1944 only - May 1 0:00 0 S
Rule Mexico 1950 only - Feb 12 0:00 1:00 D
Rule Mexico 1950 only - Jul 30 0:00 0 S
Rule Mexico 1996 2000 - Apr Sun>=1 2:00 1:00 D
Rule Mexico 1996 2000 - Oct lastSun 2:00 0 S
Rule Mexico 2001 only - May Sun>=1 2:00 1:00 D
Rule Mexico 2001 only - Sep lastSun 2:00 0 S
Rule Mexico 2002 max - Apr Sun>=1 2:00 1:00 D
Rule Mexico 2002 max - Oct lastSun 2:00 0 S
红色字体1:00表示有夏令时,要加一小时;0表示不用加。前面的时间是执行夏令时的时间段。如果要求2014年开始每年4月1日到10月31日执行夏令
时,其余时间取消夏令时可以新增如下2句:
Rule Mexico 2014 max - Apr 1 2:00 1:00 D
Rule Mexico 2014 max - Oct 31 2:00 0 S
2、时区(如Moscow在文件europe)
Zone Europe/Moscow 2:30:17 - LMT 1880
2:30:17 - MMT 1916 Jul 3 # Moscow Mean Time
2:31:19 Russia %s 1919 Jul 1 2:00
3:00 Russia %s 1921 Oct
3:00 Russia MSK/MSD 1922 Oct
2:00 - EET 1930 Jun 21
3:00 Russia MSK/MSD 1991 Mar 31 2:00s
2:00 Russia EE%sT 1992 Jan 19 2:00s
3:00 Russia MSK/MSD 2011 Mar 27 2:00s
4:00 - MSK 2014 Oct 26 2:00s
3:00 - MSK
新增2014年10月26日之后执行GMT+3时区
3、KK版本需要修改ICU对应的时区信息,比如Moscow
修改文件external\icu\icu4c\data\misc\zoneinfo64.txt(可以参考FAQ04553ICU )
把Moscow时区部分使用下面替换掉,然后参考FAQ04011 重新编译icu资源
/* Europe/Moscow */ :table {
trans:intvector { -1688265017, -1656819079, -1641353479, -1627965079, -1618716679, -1596429079, -1593829879, -1589860800, -
1542427200, -1539493200, -1525323600, -1522728000, -1491188400, -1247536800, 354920400, 370728000, 386456400, 402264000,
417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400,
591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686102400, 695779200, 701812800, 717534000, 733273200,
748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000,
922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400,
1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200,
1256425200, 1269730800, 1288479600, 1301180400, 1414274400 }
typeOffsets:intvector { 9017, 0, 7200, 0, 7200, 3600, 9079, 0, 9079, 3600, 9079, 7200, 10800, 0, 10800, 3600, 10800, 7200, 14400,
0 }
typeMap:bin {
"030403050405070607080706010607060706070607060706070607060706070607060201060706070607060706070607060706070607060706070607060706070
6070607060706070607060906" }
links:intvector { 462, 618 }
}
二、 修改完成后需要执行脚本生成data文件,具体执行可以参考
KK之前的版本:FAQ05710
KK之后的版本(L,M):FAQ12532
三、关于俄罗斯时区的问题
请参考:FAQ13442,FAQ13443
