Linux下C语言恢复夏令时

Posted

技术标签:

【中文标题】Linux下C语言恢复夏令时【英文标题】:DST restoration under Linux in C 【发布时间】:2011-08-29 11:57:06 【问题描述】:

我有来自德国柏林的日期/时间信息。 例如: 2011-05-16 12:24:23, 2011-01-21 17:00:31

很遗憾,这些时间没有夏令时信息。我知道第一次是 CEST,第二次是 CET。

我可以写一个检查日期/时间是否是夏令时。

夏令时从 3 月的最后一个星期日凌晨 2:00 开始,到 10 月的最后一个星期日凌晨 3 点结束。

自行开发这样的检查对我来说似乎很容易出错。有什么东西可以在 Linux 下用 C 语言使用吗?

感谢您的帮助。

【问题讨论】:

【参考方案1】:

您可以使用mktime() 将时间转换为time_t,然后将其传回localtime(),这将设置tm_isdstmktime()localtime() 都使用您本地系统的时间配置,因此您会真正发现时间戳是否在 DST 您所在的位置。这里明显的问题是您有一个没有地理信息的时间戳字符串,所以您能做的最好的就是假设它是针对您当前位置的。

【讨论】:

【参考方案2】:

您可以将%Z 格式参数传递给date 命令以从日期获取时区,然后根据时区名称确定DST 是否生效:

$ date -d '2011-05-16' '+%Z'
CEST

$ date -d '2011-01-21' '+%Z'
CET

【讨论】:

以上是关于Linux下C语言恢复夏令时的主要内容,如果未能解决你的问题,请参考以下文章

有没有啥简单的方法可以在 C/C++ 中获得 Linux 下的夏令时转换时间

Linux 夏令时通知

Linux系统时间时区夏令时杂谈

Linux系统时间时区夏令时杂谈

python time.time() 和“夏令时”

Linux多睡/少睡一小时!冬夏令时全解析