在我们的MiniHub产品上,时区是通过设置TZ环境变量或者设置/etc/TZ变量得到的。
这个可以查libc库源码阅读 tzset() 得知:
在函数 read_TZ_file() 函数中,从 /etc/TZ 中读取时区串。
系统帮助是这么说的:
如果 TZ 环境变量没有设置,或值是空的,或者不能解析,那么系统就以 UTC 时间返回。
TZ 的格式如下: std offset[dst[offset][,start[/time],end[/time]]],中间没有空格。
具体如下:
std 为时区名,大于或等于3字节的字串,如中国为CST.
offset 为偏移量,格式是: [+|-]hh[:mm[:ss]],值得注意的是,东区为负,西区为正。
如,中国为东8区,那么偏移值为 -8,而不是 +8。
对于印度这种东5.5时区的,偏移为 -5:30
dst 与后面的 offset 为夏令时。如果只设定了dst,而没有指定offset,那么时间默认提前1小时
比如 New Zealand 例子,TZ="NZST-12:00:00NZDT-13:00:00,M10.1.0,M3.3.0"
那里的标准时间NZST是相对UTC时间提前了12小时,日照时间相对UTC提前13小时。
夏令时从10月的第1个星期日到3月的第3个星期日结束。
好了,只介绍这里。
试一下:
如上,第一个设定为东8区,时间正常。
第二个设置为-8:30,结果时间提前了30分钟。
第三个添加了DDS,则时间再提交1小时。