目录
- 操作
- 说明
- 实验
- 参考
最近有个针对时区的需求,研究了下。
查询网上的一些设置,发现基本都是系统中自带的一些文件,然后开机时解析,或者是有个修改的命令。
操作
但针对嵌入式常用到的 busybox
制作的最小系统,并没有那些文件,后查询到,可以通过设置环境变量 TZ
来改变时区的设置。如下命令,设置 东 8 时区:(这里有些疑惑东8区为何是 -8,西8区为 +8
)
export TZ=CST-8
也可在程序中使用函数
#include <stdlib.h>
setenv( "TZ", "CST-08", 1 );
后发现这个 CST 可以随意更换字母,在 date
输出时,就是对应字母。
说明
使用命令 man 3 tzset
查询函数 tzset 时,发现了这部分说明,可设置夏令时:
上图中,Mm.w.d 设置为 10 月第 1 周的周日到下年 3 月的第 3 个周日的时间为 0 时区加 13 小时
,其余时间为 12 小时,在最后一天 2 点变化。
实验
下图为实际实验结果:
-
设置
TZ=CST-8
,时间在 UTC 时间基础上加了8
小时; -
后进行了夏令时设置,时间在 UTC 时间基础上加了 8.5 小时,英文字母变为了设置的
CSST
; -
设置时间为
2023 年 10 月 1日 的接近 2 点
的时间变化时刻之前,英文字母变为了设置的CST
,当时间超过 2 点后,查询时间变为了 2 点半,英文字母变为了设置的CSST
-
实验了时间从 2023 年 3 月 5 日的 CSST 时间变为 CST 时间,当手动设置当天的 1小时 29分时,为
CSST
,自动走时到超过1小时30分,时间未变回,后边过了半个多小时,在2 小时 3 分
时查看时间,变为了CST
时间(中间未查看时间,这里变化时间不确定,大概率是2小时,就不重新实验了);但手动设置当天的 1小时 30 分时,直接变为了 CST 显示
。这里存在这个区别。
参考
https://juejin.cn/post/7076729170205605918
https://zhuanlan.zhihu.com/p/583438496