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文件使用组成的名称STDhere,它们代表没有特定的时区。


实际上是WSL尝试在Linux中匹配您的Windows时区。这是一个非平凡的映射,如discussionWindows 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/zoneinfodate中的时区文件匹配的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

如何编写单元测试以确保我的基于日期/时间的代码适用于所有时区以及有/无 DST?

如何显示 dst 空闲时区偏移量?

Python & pytz:确定时区是不是支持 DST 以及 DST 和非 DST UTC 偏移量是多少

使用 pytz 时区时 Python 日期时间不包括 DST

Python 中给定 TimeZone 的标准 UTC 偏移量(无 DST)