Mexico City Timezone is incorrect

背景: 墨西哥取消夏令时,Android 系统的时区时间会不对,需要同步更新时区。

解决方案 – – 更新timezone data (以Android10 为例):

  1. 更新system/timezone/,主要检查system/timezone/input_data/iana 下的tzdata 更新至2023a
    https://android.googlesource.com/platform/system/timezone/+/refs/heads/android10-dev
  2. 同步更新externam/icu, 以防全编报错。
    https://android.googlesource.com/platform/external/icu/+/refs/heads/android10-dev
  3. 进入system/timezone, 执行python update-tzdata.py
  4. 此时system/timezone/和external/icu会有更新

验证方式:

  1. Setting > System > Date Time > disable Use Network Provider Time > disable use network provided time zone > under select Time zone > choose Mexico City 检查时间是否正确, Mexio
  2. 查看tz_version版本是否都更新到2023a。
    /system/usr/share/zoneinfo/tz_version
    /system/usr/share/zoneinfo/tzdata

该方案在Android10及以下的平台都可以完全解决该问题。

但是在Android11该方案没有生效!!!

根据log," zygote : Time zone APEX ICU file found: /apex/com.android.tzdata/etc/icu/icu_tzdata.dat"

查看com.android.tzdata下tz_version 没有更新。

cat apex/com.android.tzdata/etc/tz/tz_version

新增修改, 更新com.android.tzdata apks

然鹅,又有新的问题,

run cts -m CtsIcuTestCases -t com.android.i18n.test.timezone.TimeZoneIntegrationTest#testTzDataSetVersions fail
run gts -m GtsOsTestCases -t com.google.android.os.gts.MainlineConfigurationTest#testMainlineApprovedTrain fail

原因就是不能单独更新com.android.tzdata apksvendor/partner_modules下需要统一更新mainline,这一块就请相关同事帮忙处理更新。

如果国内的产品不需要跑CTS和GTS的话,现有方案已经可以解决该问题。

其他收获的话,还是要时常关注google对Android的更新。

### 使用 `timezone.utc` 进行时区处理 在 Python 中,可以利用标准库中的 `datetime` 和 `timezone` 来创建 UTC 时间对象并执行相应的时区转换。下面展示如何具体应用 `timezone.utc`。 #### 创建带有 UTC 时区的信息 可以直接通过指定 `tzinfo=timezone.utc` 参数来定义一个基于协调世界时(UTC)的时间实例: ```python from datetime import datetime, timezone utc_now = datetime.now(timezone.utc) print(f"Current time in UTC is {utc_now}") ``` 这段代码会获取当前时刻对应的 UTC 时间,并将其作为带有时区信息的对象返回[^1]。 #### 将本地时间转换为 UTC 时间 如果已经有一个不带时区信息的本地时间点,则可以通过 `.replace()` 方法为其添加 UTC 时区属性;对于已知特定时区的时间戳来说,应该先设置原始时区再调用 `.astimezone(timezone.utc)` 转换成 UTC 格式: ```python local_dt_without_tz = datetime(2023, 9, 15, hour=8) # 错误示范:直接 replace 可能导致错误的结果 incorrect_utc_conversion = local_dt_without_tz.replace(tzinfo=timezone.utc) # 正确做法:假设这是上海时间,应先设定正确时区后再转成 UTC correct_localization_then_convert_to_utc = ( local_dt_without_tz .replace(tzinfo=timezone(timedelta(hours=8))) .astimezone(timezone.utc) ) print(f"Incorrect conversion result: {incorrect_utc_conversion}") print(f"Correct conversion after localization: {correct_localization_then_convert_to_utc}") ``` 这里强调了正确的时区转换流程的重要性——即不应简单地给定 `tzinfo=timezone.utc`,而是要确保源数据拥有准确的初始时区标记之后再做变换[^4]。 #### 输出格式化后的 UTC 时间字符串 当需要显示或记录经过处理过的 UTC 时间时,可借助于 `.strftime()` 函数来自定义输出样式: ```python formatted_utc_string = utc_now.strftime("%Y-%m-%d %H:%M:%S Z") print(formatted_utc_string) ``` 此部分展示了怎样把之前得到的 UTC 时间按照 ISO 8601 或其他自定义模式呈现出来[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值