在Linux下DST恢复

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

不幸的是,这些时间没有夏令时信息。 我知道第一次约会是CEST,第二次是CET。

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

夏季开始于上午2:00的最后一个星期天,10月的最后一个星期三凌晨3点结束。

自我发展这样的检查似乎对我来说很容易出错。 有什么可以在Linux下在C中使用?

感谢您的帮助。

你可以用mktime()把时间转换成time_t ,然后把它传递回到设置tm_isdst localtime()mktime()localtime()使用本地系统的时间配置,所以你真的发现时间戳是否在DST 。 这里显而易见的问题是,你有一个没有地理信息的时间戳字符串,所以你可以做的最好的假设是你的当前位置。

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

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