tzdata更新

tzdata包:Index of /ubuntu/pool/main/t/tzdata/
官网:http://www.iana.org/time-zones
代码路径:system\timezone\input_data\iana\tzdata2017b.tar.gz
执行脚本:update-tzdata.py(执行时先soure ,lunch ,make)
生成路径: system\timezone\output_data\iana\tzdata
手机路径:system/usr/share/zoneinfo/tzdata(只替换tzdata不生效,原因在于python脚本还修改了其它文件)
下载:注释CheckSignature(latest_iana_tar_filename, signature_filename)
执行 python download-iana-data.py (可下载最新版本)

一.如何修改

比如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    //1:00 D表示使用夏令时,时区基础上加1,这句话意思是从2002开始,从四月份的第一个星期天之后使用夏令时
Rule    Mexico  2002    max -   Oct lastSun 2:00    0   S  //2002开始,10月份的最后一个星期天后使用东令时
 
Zone America/Mexico_City -6:36:36 - LMT 1922 Jan  1  0:23:24    //时区
            -7:00   -   MST 1927 Jun 10 23:00
            -6:00   -   CST 1930 Nov 15
            -7:00   -   MST 1931 May  1 23:00
            -6:00   -   CST 1931 Oct
            -7:00   -   MST 1932 Apr  1
            -6:00   Mexico  C%sT    2001 Sep 30  2:00
            -6:00   -   CST 2002 Feb 20
            -6:00   Mexico  C%sT

1.先source build/envsetup.sh ,lunch ,make整编源码
2.解压system\timezone\input_data\iana\tzdata*.tar.gz
3.修改压缩包中的northamerica文件:
将Rule Mexico 2002 max - Apr Sun>=1 2:00 1:00 D
修改为Rule Mexico 2002 max - Apr Sun>=1 2:00 0 S
4.重新打包成tar.gz文件,执行system\timezone下的update-tzdata.py脚本
python update-tzdata.py
5.重新编译刷system镜像
6.验证:将日期设置为4月10号,查看Mexico时区是否更改

二.手动设置时区流程分析

imeZoneSettings.java中的onRegionZonePreferenceClicked
→startPickerFragment
→SubSettingLauncher.launch()
→launchForResult
–>listener.startActivityForResult(intent, requestCode); //启动RegionZonePicker.java
→RegionZonePicker的OnCreate
→localeDisplayNames.regionDisplayName(regionId); //LocaleDisplayNamesImpl
TimeZoneSettings回调onActivityResult ,(获取的结果中包含regionId和tzId)
→onZonePickerRequestResult
→setDisplayedTimeZoneInfo
use(RegionZonePreferenceController.class).setTimeZoneInfo(tzInfo) //设置显示的summary
use(RegionZonePreferenceController.class).setClickable //设置是否可以点击
use(TimeZoneInfoPreferenceController.class).setTimeZoneInfo(tzInfo); //设置最下面一行的提示

三.执行update-tzdata.py报错处理

androi5.1位于 /bionic/libc/tools/zoneinfo/update-tzdata.py ,由于没有保存压缩包,而是直接通过该脚本下载,若想修改相关信息,需修改该脚本
可参考https://blog.csdn.net/qiweihua19860719/article/details/56669312
android7.1位于/external/icu/tools/update-tzdata.py,同android5一样若想修改相关信息,需修改该脚本
amdroid8.1位于/system/timezone/update-tzdata.py,之后一直这个目录下
1>android 7 Can’t check signature: No public key
注释176行的CheckSignature(filename) ,脚本默认下载tzdata2017a.tar.gz
在这里插入图片描述

2>更新至最新版本
脚本修改如下可下载最新版本
在这里插入图片描述

四.编译icu

https://icu.unicode.org/download/73 ,tzdata版本要和icu版本相对应,比如tzdata2023 对应icu73,icu4c\source\configure中搜索PACKAGE_VERSION可知道版本

https://github.com/unicode-org/icu/releases/tag/release-73-1,下载source code ,将icu4c替换

cd external/icu/icu4c/source
mkdir build && cd build
./../runConfigureICU Linux
make clean
make INCLUDE_UNI_CORE_DATA=1     //在/out/tmp/下生成icudtXXX.dat, 该文件位于模块system/usr/icu/目录下
cp -f external/icu/icu4c/source/build/data/out/tmp/icudtXXX.dat ./icu4c/source/stubdata/icudtXXX.dat   //用于整体编译
 
//返回到代码根目录重新编译
make -j12
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值