DST所指的时区是什么?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DST所指的时区是什么?相关的知识,希望对你有一定的参考价值。
我正在使用WSL和ubuntu 16.04,今天遇到了网络问题。这是日期输出
$ date
Thu Sep 21 13:37:00 DST 2017
DST指的是什么?我知道它代表“夏令时”,但那是not a timezone name。我怀疑它是一个人为的时区,它在昼夜平分点上有所改变,这可以解释我今天的问题。
我能够通过将我的时区设置为US/Pacific
来解决我的问题,PDT
将输出更改为$ date
Thu Sep 21 13:37:00 PDT 2017
:
X/Y
但是,我有第二台机器有同样的问题,我很好奇它认为它的时区。
反正有没有得到与DST
对应的/usr/share/zoneinfo/Msft/localtime
字符串(Olson数据库名称)?
TL; DR WSL在/etc/localtime
动态生成一个虚假的时区信息文件,与DST
硬链接。 Msft文件使用组成的名称STD
或here,它们代表没有特定的时区。
实际上是WSL尝试在Linux中匹配您的Windows时区。这是一个非平凡的映射,如discussion(Windows API)所示。因此,我认为WSL所做的不是试图击中一个不断变化的目标,而是使用timezone info file获取Windows时区信息,并根据该信息动态生成wslhost
。
我相信C:WindowsSystem32lxssLxssManager.dll
(特别是/usr/share/zoneinfo/Msft/localtime
中的代码)会在Windows中对您当前的时区进行检查,并写入wslhost
文件。这就是为什么当Windows中的时区发生变化时,您会立即看到已经运行的WSL中的影响。但是由于没有从Windows时区到Linux或POSIX时区的完美映射,/etc/localtime
可能只是名称,这就是DST发挥作用的地方。
更新:实际上,如果您处于夏令时区时区,我认为它只是说“DST”,而非DST时区则是“STD”(标准I假设)。
因此,“DST代表什么时区”的答案是否定的,任何试图将/usr/share/zoneinfo
与date
中的时区文件匹配的Linux程序(通过readlink或只是搜索)都只会将“Msft / localtime”作为一个回答。一个“技术上准确,但完全没用”的答案。
更新:这个答案可能是错的; OP报告的输出与我的假设不一致。
我相信这是一个无法识别的时区,由$ date -u ; TZ=DST date ; TZ=NOSUCHTIMEZONE date
Thu Sep 21 21:04:44 UTC 2017
Thu Sep 21 21:04:44 DST 2017
Thu Sep 21 21:04:44 NOSUCHTIMEZONE 2017
$
命令解释为UTC。
在我的Ubuntu 14.04系统上:
$TZ
可能有些东西将你的DST
环境变量设置为echo $TZ
。
检查你的环境(DST
)。如果它不打印$TZ
,我错了。 (编辑:OP说DST
是空的。)
(在/usr/share/zoneinfo
下没有任何名为https://askubuntu.com/questions/595569/update-time-for-daylight-savings-time-set-system-clock-to-utc-time-and-stay-in。)
据我所知,在这种情况下,DST实际上确实涉及夏令时。
Ubuntu因DST调整的错误而臭名昭着:qazxswpoi
以上是关于DST所指的时区是什么?的主要内容,如果未能解决你的问题,请参考以下文章
如何编写单元测试以确保我的基于日期/时间的代码适用于所有时区以及有/无 DST?
Python & pytz:确定时区是不是支持 DST 以及 DST 和非 DST UTC 偏移量是多少