我使用向服务器发送一些元数据的旧设备。我需要操纵 UTC 格式的日期时间。我还获取设备位于 POSIX 格式的时区信息,例如。柏林:
CET-1CEST,M3.5.0/2,M10.5.0/3
但是,像 pytz
这样的流行库似乎不支持这种格式
因此我想我只需将其转换为 Olson 格式即可:Europe/Berlin
但我找不到将 POSIX 格式转换为 Olson 格式的方法(我认为这是常见的事情并且得到了很好的支持)。你会怎么做?
最佳答案
您无法从 POSIX 转换为 Olson。
POSIX 字符串是一种用于编码偏移、缩写和转换的格式。它们只能表示单个“标准时间”偏移、一个可选的单个“夏令时”偏移以及它们之间的一对转换。
Olson 字符串(又名 IANA、tzdb、tzinfo 等)是标识符。它们引用 tz 数据中的 Zone
或 Link
条目。每个区域可以包含任意数量的偏移和转换(使用规则
条目)。这样可以真实地表示时区如何随时间变化。
可以为给定的奥尔森时区和给定的时间点(例如“现在”)投影 POSIX 字符串,但反之则不可能。
在您给出的示例中,给定 Europe/Berlin
,我可以计算当前的 POSIX 字符串,它看起来像您所显示的那样。但对于 Europe/Paris
和其他几个随着时间的推移有自己的变化的不同时区,将计算完全相同的字符串。没有办法区分它们。
关于python - POSIX 到 Olson/IANA 时区格式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43050855/