如何确定针对DST校正的GMT偏移? (嵌入式系统,没有O / S但是HTTP。)

时间:2018-04-04 17:41:04

标签: utc dst timezone-offset gmt

哇!关于将GMT转换为当地时间的大量帖子,包括夏令时的修正。但似乎我的需求是不同的。

正如标题所说,我有一个没有O / S的独立嵌入式系统。我正在使用NTP来获取UTC。这用于标记具有准确日期/时间的事件。我可以为当前时区校正UTC,但无法自动调整DST。

由于没有O / S,我没有任何Windows / Linux数据,如时区。因此无法在本地调整GMT偏移量。

对我来说,这样做的唯一方法是使用http调用来查找偏移量,而我能想到的唯一方法就是使用lon / lat或地址。我可以在配置中添加lon / lat或地址,因此这似乎是唯一的选择。

我见过基于位置返回GMT偏移量的网站的引用。这些网站是否也会自动调整DST?要做到这一点,他们必须使用本论坛中许多地方发布的解决方案之一,但这应该很容易。

感谢您的建议和帮助!

戴夫

1 个答案:

答案 0 :(得分:0)

如果您只需要将特定的单个时间戳转换为本地时间,那么是 - 您可以使用诸如listed here之类的服务。除了提供IANA时区ID之外,至少Microsoft和Google提供的时间戳确实将时间戳转换为给定时区的本地时间。

此外,您会发现Microsoft Azure LBS Time Zone API中的gettimezonebycoordinates函数返回PosixTz值,例如"PST+8PDT,M3.2.0,M11.1.0"。这是嵌入式系统的理想选择,因为您可以将TZ环境变量设置为此值,然后许多本地API(例如C和其他API)将在其转换中使用此值。当您可能转换许多不同的本地时间值并且不想为每个时间值进行http调用时,此方法效果最佳。

但请注意,使用POSIX时区字符串有一些限制,例如仅限于一组DST转换规则。它们通常可以在近乎时间范围内正常工作,但不能用于历史目的。