执行$ date -R
给了我,+0300
但是当我打印时区全局变量时timezone
,它显示给我-7200
。
想法发生了什么?
看起来 DST 不包括在内,并且时区符号不同,但为什么呢?
timezone
不知道 D(aylight)S(aving)T(ime) 的定义。时区是地球上全年不变的部分(更新:至少在Sandford Fleming 发明它们的日子里,它们的命名是不变的)。因此,由于对格林威治的偏移量很常见,因此添加临时 DST 偏移量是没有意义的。
不同的符号是由于日期/时间和时区的不同观点和方向。
给出的偏移量date
是指从您所在的位置到格林威治。
测量到您来自格林威治的timezone
位置。
关于 C 系统调用:gettimeofday()
提供 DST 信息。(更新:这不是glibc
实施的情况)
根据我的手册页timezone
设置为
格林威治标准时间以西的秒数
我会理解,就像“在西方越多,你就越大timezone
”。所以标志不同,date -R
也不包括夏令时。
您可以使用struct tm *
获取的localtime()
来检查您的环境中是否确实存在 DST。如果是该领域tm_isdst > 0
,那么它就是。