夏令时引起仪表时间显示错误

本文详细描述了车机系统在遇到夏令时调整时,仪表时间显示错误的问题。问题在于Android系统同步的时区信息无法准确处理非整数小时的夏令时Offset。解决方法包括发送当前本地时区的Offset给MCU,由MCU结合UTC时间计算,以及判断时区夏令时状态获取精确Offset。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题现象

测试同事反馈,车机设置不同时区,车机时间显示正确,而仪表显示时间不对。

二、问题背景

车机Android系统时间变化时,会同步当前系统UTC时间及时区信息给MCU,由MCU根据时区信息转换为本地时间后,每一分钟变化时将本地时间发送至CAN总线,仪表根据CAN总线时间进行显示。

三、问题分析

由于部分国家使用夏令时,存在15分钟、30分钟、45分钟、1小时等非整数小时的Offset(相对UTC+0时间)时间差,同时夏令时启用仅在一段日期类生效。固原方案仅使用时区来计算本地时间时,当启用夏令时时存在错误。

四、解决方法

1、将当前本地时区的Offset(单位秒)发送至MCU,由MCU根据UTC时间与Offset进行求和即可。

2、系统根据当前时区是否启用夏令时获取Offset值。

3、代码实现如下。

    /**
     * 同步系统时间和时区至MCU
     * utcTimeSecs utc时间,单位秒
     * zone 本地时区 + 12,0 - 24 表示 -12 - 12
     * offsetSecs 本地时间与utc时间差,单位秒
     */
    private void syncTimeAndZoneToMcu() {
        int utcTimeSecs = (int) (System.currentTimeMillis() / 1000);

        TimeZone localZone = TimeZone.getDefault();
        int zo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shusuanly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值