Восстановление DST под Linux в C

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

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

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

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

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

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

2 ответа

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

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

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

$ date -d '2011-01-21' '+%Z'
CET
Другие вопросы по тегам