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_isdst
。 mktime()
和 localtime()
都使用您本地系统的时间配置,因此您会真正发现时间戳是否在 DST 您所在的位置。这里明显的问题是您有一个没有地理信息的时间戳字符串,所以您能做的最好的就是假设它是针对您当前位置的。
【讨论】:
【参考方案2】:您可以将%Z
格式参数传递给date 命令以从日期获取时区,然后根据时区名称确定DST 是否生效:
$ date -d '2011-05-16' '+%Z'
CEST
$ date -d '2011-01-21' '+%Z'
CET
【讨论】:
以上是关于Linux下C语言恢复夏令时的主要内容,如果未能解决你的问题,请参考以下文章