车机系统夏令时设置功能的说明
车机系统夏令时设置功能的说明
基本原理,夏令时,也就daylight saving time。据说古时候,电费比较贵,为了多采用白天自然光照明,通过行政的方式,调节上班时间。使大家能充分使用白天的时间干活,避免晚上加班浪费电。这是多好是设想啊!
具体做法:每年从春天转变为夏天的某一天,看到天亮时间越来越早了,于是就在那一天的晚上12点把时钟统一调快一个小时。这样一来,到了那一天,本来是早上9点上班的,虽然看到时钟上也显示9点,但相当于昨天的8点,但是没关系,慢慢就会习惯的了…
好不容易夏天过去了,快到秋天了,看到天亮越来越迟了,于是到了某一天,按照国家规定,在凌晨1点钟,拿出时钟把时间调回12点。这样,相当于可以多睡一个小时觉,感觉挺不错的…
具体哪一天开始夏令时,不同国家有不同的规定,在写code的时候要按照规范来写。
实现逻辑:很多人只看到夏令时的表象,不理解它的本质,所以实现的时候往往把问题搞得很复杂。有些时候测试人员也不理解这个玩意,所以有时候也是乱提bug,往往搞得错上加错。其实,如果真正理解了夏令时的逻辑,要实现起来是很简单的。下面分几种情况来进行说明,首先是机器本身如果没有其他时间同步源的情况下应该怎样做,机器有其他时间同步源又应该怎样做。时间同步源,指的是外部提供的对时信号,例如网络对时,GPS对时,RDS对时,或者电波对时等等。
对于没有时间同步源的情况,唯一的时间源就是系统时钟,这种情况下,通常在设置菜单上有一个是否打开夏令时的设置选项。如果此选项打开,这个时候执行3个动作,第一个动作就是判断一下当前的时间是否已经在夏令时范围内,例如有一个函数写作isInDST(),假如是夏令时范围内,就把当前的时间加上一个小时,也就是把系统时间往前增加一个小时,比如时间变量h,变成h+1;第二个动作就是在系统的记忆内存里把已经加过一个小时这个状态记忆住,避免后面反复的增加一个小时,也就是说只要增加过一个小时,后面就不要再增加了,除非这个记忆被清除,我们把这个变量定义为m1;第三个动作,就是把设置项的这个夏令时功能打开也记忆住,以便下次开机的时候还是打开,我们把这个变量定义为m2;对于当前时间还不是夏令时的情况呢,h就不用加1,m1也应该保持为0,但m2要设置为1;然后,我们还需要在时间发生变化的地方进行监控,例如在分钟发生变化的地方,判断一下m2是否为1,然后再判断一下isInDST(),假如为真,就再判断m1是否为1,假如m1不为1,就把h做一下+1,假如m1已经为1,就不用做任何事情。
接下来,还要考虑取消夏令时,处理逻辑就跟前面的相反。例如用户在菜单里点击取消夏令时,那么程序需要判断一下之前是否有给h加过1,如果有加过的话,就要执行-1;同样的,假如在分钟发生变化的时候,假如判断到刚好要超出夏令时的范围了,此时就要把时间修正回来,也就是把h做-1.
对于有同步时钟源的情况,应该怎样做呢?例如有GPS时间的情况,GPS获取到的往往是UTC时间,也就是国际统一时间,或者就是在0时区那里的时间。它是不考虑夏令时的,需要由机器本身做一个转换的管理。算法可以是这样,假如收到GPS的时间,通常这个时间是1秒更新一次。我们需要对比一下GPS时间和本地的时间,比较的方式就是判断timeGPS == timeLocal - m1.也就是说,假如我们设置了夏令时,我们需要把本地时钟的时间减去1个小时来跟GPS时间对比。假如存在偏差,就需要把本地时间修正为GPS的时间。这种修正,其实应该是不会很频繁的,因为现在本地时间的准确度也是做得很好。往往只是本地时间因为掉电,导致时间恢复默认,才会需要做修正。
有些时间同步源可能是做了夏令时修正的,对于这种同步源就不需要再重复做夏令时的修正了,只需要直接同步就可以。
也有一下系统,为了更方便用户使用,会有更多的选项给客户选择是否允许外部的时间源对本地时间做同步。
最后讲一下常常遇到的困扰,或者坑。
-
本地时间被反复加1,假如不设置m1,就会有这种情况发生。有的人直接把m2当成m1,这样就会导致概念混淆,用户打开了夏令时,并不表示系统时间已经加过1。
-
临界时间问题,例如在进入夏令时前一分钟把夏令时打开,理论上就会看到下一分钟时间会自动从12点跳到1点。有的人没有经验的话,会容易搞错这个逻辑。例如会在11点自动加1小时到12点,或者在1点加到2点。这些都是在写代码之前没有经过深思熟虑和设计好逻辑的情况下匆忙写出来的不可靠的代码。
-
同样的,退出夏令时的处理也可能会被测出问题。例如用户在菜单里取消了夏令时,但时间不会-1.
-
有些测试员喜欢搞压力测试,短时间内反复打开关闭设置按钮,如果程序没有对这种输入进行约束,就会反复对本地时间进行设置,会容易出现时序上的错乱。
-
有些不是bug的情况往往会因为测试人员不了解而误报,在不是夏令时的时间段打开夏令时,系统时间是不会变的,但测试员以为不管什么时候都要给+1或-1.
-
假如在临界时间的前一秒打开了夏令时,是否会错过+1呢?如果我们考虑得比较充分,这种情况应该不会发生,即使这一分钟不+1,下一分钟应该也会判断到并且能修正过来。
-
在多线程的环境下,需要对时间和状态变量的地方加锁,避免变量被多加或多减。
-
有些系统需要把夏令时同步到其他的仪表,需要确保本机显示的夏令时要同步到仪表上,避免显示不一致。
-
需要注意的是,每年的夏令时开始和结束时间是不一样的,一般需要通过查表实现。以下是某中东国家的例子,仅供参考。
年 份 开 始 时 间 结 束 时 间
2010 3月22日0时 9月22日0时
2011 3月22日0时 9月22日0时
2012 3月21日0时 9月21日0时
2013 3月22日0时 9月22日0时
2014 3月22日0时 9月22日0时
2015 3月22日0时 9月22日0时
2016 3月21日0时 9月21日0时
2017 3月22日0时 9月22日0时
2018 3月22日0时 9月22日0时
2019 3月22日0时 9月22日0时
2020 3月21日0时 9月21日0时
2021 3月22日0时 9月22日0时
2022 3月22日0时 9月22日0时
2023 3月22日0时 9月22日0时
2024 3月21日0时 9月21日0时
2025 3月22日0时 9月22日0时
2026 3月22日0时 9月22日0时
2027 3月22日0时 9月22日0时
2028 3月21日0时 9月21日0时
2029 3月22日0时 9月22日0时
2030 3月22日0时 9月22日0时
2031 3月22日0时 9月22日0时
2032 3月21日0时 9月21日0时
2033 3月22日0时 9月22日0时
2034 3月22日0时 9月22日0时
2035 3月22日0时 9月22日0时
2036 3月21日0时 9月21日0时
2037 3月22日0时 9月22日0时
2038 3月22日0时 9月22日0时 -
有些人喜欢通过一种双时间制式的方式来实现夏令时,也就是不直接修改本地时间,仅仅在GUI显示时间的时候根据夏令时条件是否成立来决定时间。这种情况需要注意区分好m1和m2的关系,不能把关系搞混。另外就是因为在某些临界点,例如一天的最后一个小时,此时+1的话,日期就要提前+1,同样的,如果刚好处于一个月的最后一天,那么月份也要相应做调整。
-
采用上面方式的,在同步给其他仪表时间的时候也需要考虑是否需要修正其发送的时间以避免显示不一致。
相关文章:
车机系统夏令时设置功能的说明
车机系统夏令时设置功能的说明 基本原理,夏令时,也就daylight saving time。据说古时候,电费比较贵,为了多采用白天自然光照明,通过行政的方式,调节上班时间。使大家能充分使用白天的时间干活,…...
DeepSeek+大数据分析快速应用落地
一、环境准备 1、准备一个 hive 的环境,并可以进行远程连接 2、环境中安装有 sqoop 和 mysql 3、DeepSeek 我使用的是 《问小白》 注册地址:打开问小白,填入我的分享码【1VYXOI】使用满血DeepSeek R1,零延迟、不卡、不限次、不…...
web前端开发:CSS的常用选择器
CSS常用选择器 CSS选择器是用于精准定位HTML元素并对其应用样式的核心工具。它的作用类似于“筛选器”,通过特定规则匹配文档中的元素,从而实现样式控制。 核心作用 定位元素 通过元素名称、类名、ID、属性等条件,快速找到需要样式化的目标元…...
Mathematica 中,将含有小数的表达式转换为整数或分数形式
具体方法和示例: 1. 使用 Rationalize 函数 Rationalize[x] 将小数 x 转换为最接近的有理数(分数形式),可指定精度容忍度。 示例: Rationalize[0.25] (* 输出: 1/4 *) Rationalize[3.14159, 0.001] (* 输出:…...
在 Ubuntu 下通过 Docker 部署 Mastodon 服务器的详细教程
大家好!今天我们来聊聊如何在 Ubuntu 系统上通过 Docker 部署 Mastodon 服务器。Mastodon 是一个开源的社交网络平台,类似于 Twitter,但更注重隐私和去中心化。Docker 则是一个非常流行的容器化平台,能够让我们轻松地打包、分发和…...
JavaScript基础-01(笔记)
前期:js变量 数据类型 数据类型检测 类型转换 数据类型 //// 基本数据类型 存放到栈// a.Number 数字类型(包含整数 小数)var num1var num1.23443var num2222// NaN 非数字类型或者不能转为数字(例:1,"1","1233…...
【C语言基础】C++ 中的 `vector` 及其 C 语言实现详解
一、C 中的 vector:动态数组的核心特性 1. 基本概念 vector 是 C 标准模板库(STL)中的动态数组容器,支持自动扩容、高效元素访问和丰富的操作接口。其核心特性包括: 动态内存管理:自动调整容量࿰…...
记录待办事项的便签软件有没有推荐的?
在快节奏的现代生活中,我们每天都要处理大量的工作任务和生活琐事,稍有不慎就可能遗漏重要事项。你是否经常遇到这样的情况:明明记得有件事要做,却怎么也想不起来是什么;或者手头同时有好几项任务,却不知道…...
华为OD机试真题——硬件产品销售方案(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C、C语言、GO六种语言的最佳实现方式! 华为OD机试真题《硬件产品销售方案》: 目录 题目名称࿱…...
鸿蒙应用元服务开发-Account Kit未成年人模式订阅和处理用户信息变更
一、概述 通过订阅用户信息变更,您可以接收有关用户及其账户的重要更新。当用户取消元服务的授权信息、注销华为账号时,华为账号服务器会发送通知到元服务,元服务可以根据通知消息进行自身业务处理。 二、用户信息变更事件介绍 三、订阅用…...
优化 Dockerfile 性能之实践(Practice of Optimizing Dockerfile Performance)
优化 Dockerfile 性能之实践 构建 Docker 镜像时,Dockerfile 的性能会显著影响构建过程的效率。经过优化的 Dockerfile 可以缩短构建时间、最小化镜像大小并提高整体容器性能。在本文中,我们将探讨优化 Dockerfile 性能的最佳实践。 尽量减少层数 影响…...
OpenShift介绍,跟 Kubernetes ,Docker关系
1. OpenShift 简介 OpenShift是一个开源项目,基于主流的容器技术Docker及容器编排引擎Kubernetes构建。可以基于OpenShift构建属于自己的容器云平台。OpenShift的开源社区版本叫OpenShift Origin,现在叫OKD。 OpenShift 项目主页:https://www.okd.io/。OpenShift GitHub仓库…...
Go:包和 go 工具
引言 通过对关联特性分类,组成便于理解和修改的单元,使包与程序其他包保持独立,助力大型程序的设计与维护 。模块化让包可在不同项目共享、复用、发布及全球范围使用。 每个包定义不同命名空间作为标识符,关联具体包,…...
GIS开发笔记(5)结合osg及osgEarth实现虚线环形区域绘制
一、实现效果:输入中点坐标点、内圆半径、外圆半径,绘制坐标点所在高度的水平面的两个圆形形成环形区域。 二、实现原理: 创建中心点所在平面的圆形几何体,将其分别挂接到同一个节点上,再将该节点挂接到用户绘制组节…...
天线静电防护:NRESDTLC5V0D8B
一. 物联网天线的使用环境 1.1 联网天线广泛应用于智能家居领域,比如智能门锁、智能摄像头等设备中,通过天线实现设备与家庭网络的连接,用户可以远程控制和监控家居设备。以智能摄像头为例,它通过天线将拍摄的画面实时传输到用户…...
Linux进程相关选择题及解析
1. 关于Linux进程创建,以下说法正确的是? A. fork()函数调用后,子进程从父进程的fork()之后开始执行 B. fork()函数返回两次,父进程返回子进程PID,子进程返回0[10][11] C. exec函数族会替换当前进程的代码段,但保留数据段和堆栈 D. wait()函数只能等待直接子进程退出 答…...
Day(22)--网络编程习题
习题 以下是这些 TCP 通信练习题的 Java 代码实现及解析: TCP 通信练习 1 - 多发多收 客户端(Client1.java) java import java.io.IOException; import java.io.OutputStream; import java.net.Socket; public class Client1 {public…...
Kubernetes 节点摘除指南
目录 一、安全摘除节点的标准流程 1. 确认节点名称及状态 2. 标记节点为不可调度 3. 排空(Drain)节点 4. 删除节点 二、验证节点是否成功摘除 1. 检查节点列表 2. 检查节点详细信息 3. 验证 Pod 状态 三、彻底清理节点(可选…...
SM4密码算法的CPA攻击技术
SM4算法简介 可参见博文 SM4分组密码算法研究。 SM4密码算法的CPA攻击技术 相关功耗攻击(CPA)是侧信道功耗分析攻击中较为常见的攻击方法之一,攻击者利用密码算法执行过程中,在侧信道泄露的信息(如时序、能量、缓存等)和通信信道的消息(如明文、私钥等)进行测试,通过…...
Golang|KVBitcask
文章目录 初识KVbitcask论文详解 初识KV bitcask论文详解 论文地址:https://riak.com/assets/bitcask-intro.pdf理想的存储引擎,应该满足下面一些特点:...
【Python进阶】元组:不可变序列的十大核心应用
目录 前言:技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块技术选型对比 二、实战演示环境配置要求核心代码实现(10个案例)案例1:基础创建与访问案例2:解包…...
centos安装libheif
参考 解决docker: Error response from daemon: Get “https://registry-1.docker.io/v2/“:连接超时问题_error response from daemon :get-CSDN博客 HEIF编解码器安装 - navyum - 博客园 https://github.com/strukturag/libheif #升级gcc yum install centos…...
初步认识Model Context Protocol (MCP) Java SDK
1. Maven如何下载MCP Java SDK 基础配置(核心模块) 在您的pom.xml文件中添加以下依赖: <dependencyManagement> <dependencies> <dependency> <groupId>io.modelcontextprotocol.sdk</groupId> <artifactI…...
第三章 爬虫提速、selenium模块、requests模块进阶(终)
目录 一.requests进阶 (一)处理cookie (二)防盗链 (三)代理 二.爬虫提速 (一)线程池和进程池 (二)协程 (三)异步http请求-aio…...
unity使用内建组件给刚体增加重力
2019年3月9日11:10:24 unity开发中,有时候发现刚体上的重力不能满足我们的需要,可以通过使用内建组件Constant Force来增加重力: 在游戏对象上。请按照以下操作: 为Player添加一个名为Constant Force组件,选择Player在…...
Java开发中的设计模式之观察者模式详细讲解
观察者模式(Observer Pattern)是一种行为型设计模式,它定义了对象之间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都会自动收到通知并更新。这种模式在Java开发中非常常见,尤其是在事件驱…...
【学习笔记】计算机网络(九)—— 无线网络和移动网络
第9章 无线网络和移动网络 文章目录 第9章 无线网络和移动网络9.1 无线局域网WLAN9.1.1 无线局域网的组成9.1.2 802.11局域网的物理层9.1.3 802.11局域网的MAC层协议CSMA 协议CSMA/CD 协议 - 总线型 - 半双工CSMA/CA 协议 9.1.4 802.11局域网的MAC帧 9.2 无线个人区域网WPAN9.3…...
一个基于Django的写字楼管理系统实现方案
一个基于Django的写字楼管理系统实现方案 用户现在需要我用Django来编写一个写字楼管理系统的Web版本,要求包括增删改查写字楼的HTML页面,视频管理功能,本地化部署,以及人员权限管理,包含完整的代码结构和功能实现&am…...
C++面试考点:类(class)
1、类的定义 C中的类提供了面向对象编程、继承与多态的机制。其构成包括成员(各种自定义数据)、行为(定义的函数操作)、封装(private、public、protected)。核心是了解类的继承机制,以及各种封装…...
ThreadPoolExecutor 多线程用requests请求一个地址的时候为什么会报错,而多进程用requests请求一个地址的时候不会报错,为什么?
网络请求行为 多线程:requests 库底层依赖 urllib3,而 urllib3 使用连接池管理网络请求。在多线程环境中,连接池可能会因为线程间的竞争导致连接泄漏或超时。 多进程:每个进程独立管理自己的连接池,因此不会出现线程间…...
数据库脱裤
假设你已经getshell 找到mysql账号密码。 网站要连接mysql,就需要把mysql的账号密码保存在一个php文件中,类似config.php、common.inc.php等,在shell中,读取这些文件,找到其中信息即可 下面是一些常见平台的配置文…...
十二,<FastApi>中间件
什么是中间件? "中间件"是一个函数,它在每个请求被特定的路径操作处理之前,以及在每个响应之后工作. 代码示例: from fastapi import FastAPI, Response from fastapi import Request import uvicornapp FastAPI()app.middleware("http") async def m2…...
欢迎使用Markdown编辑器
使用Markdown编辑器 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个注…...
RabbitMQ架构原理及消息分发机制
RabbitMQ架构原理及消息分发机制 在现代分布式系统中,消息队列是不可或缺的组件之一。它不仅能够解耦系统模块,还能实现异步通信和削峰填谷。在众多消息队列中,RabbitMQ 因其高并发、高可靠性和丰富的功能而备受青睐。本文将从 RabbitMQ 的基…...
智能麻将出牌组件
开篇引言 麻将作为一款风靡全球的策略性游戏,其复杂的规则和多变的牌局给玩家带来了无尽乐趣。在数字化时代,运用编程技术为麻将游戏赋予智能,实现自动出牌功能,不仅能提升玩家体验,还能深入探索算法在博弈游戏中的…...
python脚本补充
本文是对实用的 Python 小脚本_python写脚本-CSDN博客的一点补充。对简单脚本的一些操作上的优化。 ###Utilities ### ###重命名文件名 import os import tkinter as tk from tkinter import filedialog, simpledialog, messageboxdef batch_rename():# 弹出文件夹选择对话框d…...
【经验记录贴】活用shell,提高工作效率
背景 最近在做测试的时候,需要手动kill服务的进程,然后通过命令重启服务,再进行测试。每次重启都会涉及到下面三个命令的执行: 1)检索进程ID $ ps -elf | grep programname root 1123 112 1234 0 0 0 0:00…...
出现 ERR_CERT_COMMON_NAME_INVALID | 301 302 重定向的解决方法
目录 前言1. 问题所示2. 原理分析3. 解决方法前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn 1. 问题所示 执行代码时,出现如下提示: GET https://xxxx/admin-api/system...
解决本地浏览器访问服务器端语音识别项目显示“麦克风未授权”的问题
解决本地浏览器访问服务器端语音识别项目显示“麦克风未授权”的问题 在 chrome://flags 启用特殊权限(不推荐长期启用) 在浏览器地址栏输入: chrome://flags然后搜索: Insecure origins treated as secure 找到类似项ÿ…...
【数论】线性筛质数
线性筛质数 在之前的一篇筛质数的文章中只解释了埃式筛质数的方法,没有解释线性筛质数的方法 我们先看一下线性筛质数的代码 【例题】 给定一个正整数 n,请你求出 1∼n 中质数的个数。 输入格式 共一行,包含整数 n。 输出格式 共一行…...
视频孪生重构施工逻辑:智慧工地的数字化升级
当"智慧工地"概念在2017年首次写入《建筑业发展"十三五"规划》时,行业普遍将其等同于摄像头与传感器的简单叠加。十年数字浪潮冲刷下,智慧工地的内涵已发生本质跃迁:从工具层面的信息化改造,进化为基于视频数…...
【Lerobot】加载本地数据LeRobotDataset数据、读取并解析parquet
官方例子:https://github.com/huggingface/lerobot/blob/main/examples/1_load_lerobot_dataset.py https://github.com/NVIDIA/Isaac-GR00T/blob/main/getting_started/LeRobot_compatible_data_schema.md 使用SO100机械臂进行数据采集后,得到如下格式…...
卷积神经网络 CNN 模型介绍
卷积神经网络 CNN 模型介绍 一、经典CNN模型1. LeNet-5(基础模型)2. AlexNet3. VGGNet(VGG16/VGG19)4. ResNet(残差网络) 二、轻量化CNN模型1. MobileNet系列2. EfficientNet3. ShuffleNet 三、改进型CNN模…...
Vue —— 实用的工具函数
目录 响应式数据管理1. toRef 和 torefs2. shallowRef 和 shallowReactive3. markRaw 依赖追踪与副作用1. computed2. watch 和 watchEffect 类型判断与优化1. unref2. isRef 、isReactive 和 isProxy 组件通信与生命周期1. provide 和 inject2. nextTick 高级工具1. useAttrs …...
Langchain + Gemini API调用基本操作
本文参考Langchain中ChatGoogleGenerativeAI的官方文档,在本地的jupyter notebook中运行。 关于API的细节在官方文档最开头给出: 我们在使用时,可以选择model"gemini-2.0-flash-001"或者生成图片的ChatGoogleGenerativeAI(model“…...
软件线上故障复盘报告
软件线上故障复盘报告 故障编号:INC-2024XXX 复盘日期:YYYY-MM-DD 参与人员:研发/运维/测试/产品/客服负责人 一、故障概况 1.1 基础信息 字段内容数据来源故障等级P0/P1/P2(参考SLA分级标准)运维告警…...
分享:批量提取图片文字并自动命名文件,ocr识别图片指定区域并重命名文件名工具,基于WPF和腾讯OCR识别的接口的视线方案
一、项目背景 在处理大量图片时,常常需要从图片中提取特定区域的文字信息,并依据这些信息对图片进行重命名。例如,在档案管理领域,大量纸质文件被扫描成图片后,需要从图片中提取关键信息(如文件编号、日期等)来重命名图片,以便后续的检索和管理;在电商领域,商家可能…...
SIMULIA-Abaqus有限元分析软件针对汽车行业的解决方案
汽车行业是Abaqus软件的一个重要应用领域,许多知名的汽车企业都是Abaqus的用户,本文为您重点介绍Abaqus针对汽车行业有哪些应用及其解决方案。 Abaqus是一款什么软件: Abaqus公司是世界知名的计算机仿真行业的软件公司,成立于197…...
linux下使用php修改php.ini的session.save_path无效的解决办法
linux下安装php的组合还是php-fpm和nginx,其实已经安装好了,网站已经能够跑起来了,但是遇到后台登录的时候验证码一直不对,看了下报错,session无法存储,于是新增了一个phpinfo文件,使用web查看下…...
脚本-QQ批量发送消息(图片和文字)
目录 代码 代码功能详解 注意事项 致谢 代码 import io import traceback import win32clipboard import pyautogui import pyperclip import win32gui # 替换为pywin32的正确模块名 import pandas as pd import time from PIL import Imageclass QQAutoMessage:def __in…...