【发布时间】:2022-01-21 10:46:17
【问题描述】:
目前我正在为 ESP32 微控制器编写组件。因此我需要一个所有时区的列表。
我找到了许多时区文件的来源,但它们对时区值使用不同的格式。一个例子是欧洲/乌里扬诺夫斯克。一些文件使用 -4,而其他文件使用 UNK-4。
ESP32 可以正确处理 UNK-4,但会以 -4 之类的值失败。
谁能解释一下,“”的格式是什么意思?他们为什么不使用缩写?不幸的是,iana 时区数据库也使用这种格式。
在此链接中:https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html 你可以阅读“std 字符串指定时区的名称。它必须是三个或更多字符长并且不得包含前导冒号、嵌入数字、逗号、加号和减号。"
那么这怎么可能是一个有效的 TZ 值呢?
在此链接中:https://man7.org/linux/man-pages/man5/tzfile.5.html 您可以阅读“一些读者错误处理包含“”的 POSIX 样式 TZ 字符串。作为部分解决方法,作者可以避免使用“”表示仅包含字母字符的时区缩写。”
显然 ESP32 受到了这个问题的影响。那么是否有另一个官方来源的时区数据库使用没有“”的格式?
感谢您的帮助!
干杯 哈拉尔
【问题讨论】:
-
为什么需要在 EPS32 中解析时区文件?我认为您应该在您的主机上执行此操作(并且可能使用库)。使用时区文件很棘手:您应该关注它的开发(例如,最近的更改会删除各个国家/地区的旧数据)。
-
ESP32 将没有互联网连接。 UTC 时间来自 GPS 模块,我编写了一个库来从 GPS 坐标中获取时区 (github.com/HarryVienna/ESP32-Timezone-Finder-Component) 你是对的,时区数据不是静态的,但我看不到其他离线组件的解决方案,,,
-
我还是不明白。您可以在计算机上解析时区。以更好的 EPS32 格式准备数据,可能会删除大部分无用数据(并且已经采用 EPS 友好格式):您定义提供给用户的时区列表、偏移量和一些规则(夏令时)。请记住,时区并不意味着离线:有很多变化(以及最后几天)。如果您还没有准备好每年两次更新固件,您应该检查是否只有 UTC 偏移量(这是恒定的):更好的界面愚蠢而不是错误的数据。