Восстановление 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