use*_*086 3 command-line ubuntu date windows-subsystem-for-linux
当我date
在 WSL 下在我的 Ubuntu 上运行时,它会打印:
Wed May 15 19:33:37 STD 2019
Run Code Online (Sandbox Code Playgroud)
为什么这里面有字符串STD
?我在网上找不到缩写为 STD 的时区(例如这里),谷歌搜索“日期标准”给了我意想不到的结果。
感谢Jesse_b找到这个Stack Overflow Q/A:
TL;DR WSL
/usr/share/zoneinfo/Msft/localtime
在硬链接到/etc/localtime
. Msft 文件使用组合名称DST
或STD
,它们不代表特定的时区。
实际发生的是 WSL 尝试在 Linux 中匹配您的 Windows 时区。这是一个非平凡的映射,如这里所见(讨论)。因此,我相信 WSL 所做的不是尝试击中不断移动的目标,而是使用Windows API来获取 Windows 时区信息,并根据该信息动态生成时区信息文件。
我相信
wslhost
(特别是 中的代码C:\Windows\System32\lxss\LxssManager.dll
)对您在 Windows 中的当前时区进行此检查,并写入/usr/share/zoneinfo/Msft/localtime
文件。这就是为什么当 Windows 中的时区发生变化时,您会立即在已经运行的 WSL 中看到影响。但是由于没有从 Windows 时区到 Linux 或 POSIX 时区的完美映射,wslhost
可能只是名称的翅膀,这就是 DST 发挥作用的地方。更新:实际上,如果您在夏令时区时区,我认为它只是说“DST”,而对于非 DST 时区则说“STD”(我假设是标准的)。
因此,“DST 代表什么时区”的答案是否定的,并且任何尝试匹配(通过读取链接或仅搜索)中
/etc/localtime
的时区文件的Linux 程序/usr/share/zoneinfo
都只会得到“Msft/localtime”作为答案。“技术上准确,但完全没用”的答案。
计划于 2019 年 5 月最终发布的 Windows 19H1 (1903) 更新解决了此问题,WSL 分发版将尽可能报告传统时区:
在最终公开发布之前,新版本已经可以通过 Windows Insider 程序获得,因此如果您有由区域标记引起的活动问题,则可以解决它。您无需执行任何操作即可激活它或应用新时区。
归档时间: |
|
查看次数: |
558 次 |
最近记录: |