Восстановление DST под Linux в C - PullRequest
5 голосов
/ 20 мая 2011

У меня есть информация о дате / времени из Берлина, Германия. Например: 2011-05-16 12:24:23, 2011-01-21 17: 00: 31

К сожалению, в эти времена НЕТ информации о летнем времени. Я знаю, что первая дата - CEST, а вторая - CET.

Я мог бы написать проверку, является ли дата / время летним или нет.

Лето начинается в последнее воскресенье марта в 2:00 и заканчивается в последнее воскресенье октября в 3:00.

Самостоятельная разработка такой проверки кажется мне подверженной ошибкам. Есть ли что-то, что уже может быть использовано под Linux в C?

Спасибо за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 05 ноября 2012

Вы можете преобразовать время в time_t с помощью mktime(), а затем передать его обратно в localtime(), что установит tm_isdst. И mktime(), и localtime() используют конфигурацию времени вашей локальной системы, так что вы действительно обнаруживаете, находится ли временная метка в DST , где вы находитесь . Очевидная проблема здесь в том, что у вас есть строка метки времени без географической информации, поэтому лучшее, что вы можете сделать, это предположить, что она соответствует вашему текущему местоположению.

1 голос
/ 25 июня 2011

Вы можете передать аргумент формата %Z в команду date , чтобы получить часовой пояс из даты, а затем определить, действовал ли DST по имени часового пояса:

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

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