当我date
在 WSL 下的 Ubuntu 上运行时,它会打印:
Wed May 15 19:33:37 STD 2019
STD
为什么里面有这个字符串?我无法在线找到缩写为 STD 的时区(例如这里)并谷歌搜索“date std”给了我意想不到的结果。
答案1
长话短说WSL 动态生成一个假时区信息文件,
/usr/share/zoneinfo/Msft/localtime
硬链接到/etc/localtime
. Msft 文件使用虚构的名称DST
或STD
,并且它们不代表特定的时区。
实际上,WSL 尝试在 Linux 中匹配您的 Windows 时区。这是一个不平凡的映射,如图所示这里(讨论)。因此,我认为 WSL 所做的不是尝试击中不断移动的目标,而是使用视窗应用程序接口获取 Windows 时区信息,并根据该信息动态生成时区信息文件。
我相信
wslhost
(特别是 中的代码C:\Windows\System32\lxss\LxssManager.dll
)会在 Windows 中对您当前的时区进行此检查,并写入文件/usr/share/zoneinfo/Msft/localtime
。这就是为什么当 Windows 中的时区发生更改时,您会立即在已运行的 WSL 中看到影响。但由于没有从 Windows 时区到 Linux 或 POSIX 时区的完美映射,wslhost
可能只是翅膀名称,这就是 DST 发挥作用的地方。更新:实际上,我认为如果您处于夏令时时区,它只是说“DST”,而对于非夏令时时区,它只是说“STD”(我认为是标准)。
因此,“DST 代表什么时区”的答案是“没有”,任何尝试匹配
/etc/localtime
时区文件的Linux 程序/usr/share/zoneinfo
(通过 readlink 或只是搜索)都只能得到“Msft/localtime”作为答案。 “技术上准确,但完全无用”的答案。
Windows 19H1 (1903) 更新计划于 2019 年 5 月最终发布,决心此问题和 WSL 发行版将尽可能报告传统时区:
直到最终公开发布,新版本已可通过 Windows Insider 计划获取,因此,如果您遇到由区域标签引起的活跃问题,则可以解决它。您无需执行任何操作即可激活它或应用新时区。