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

一、问题现象

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

二、问题背景

车机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 zone = localZone.getRawOffset() / 3600000 + 12;
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

shusuanly

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

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

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

打赏作者

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

抵扣说明:

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

余额充值