Есть ли какой-нибудь простой способ получить переход на летнее время под Linux в C / Stack Overflow

Я хочу получить время перехода на летнее время
Под Linux с указанием часового пояса или TZ env.
Мой путь тупой, давать начало года и пробовать каждый час, а затем проверять значение tm_isdst по местному времени, чтобы узнать время перехода.
Есть ли какой-нибудь простой способ сделать это?

6

Решение

В glibc есть исходный код, который вы можете просмотреть здесь:
http://sourceware.org/git/?p=glibc.git;a=tree;f=timezone

Или вы можете использовать базу данных часовых поясов здесь:
ftp://ftp.iana.org/tz/releases/tzdata2012c.tar.gz

Поскольку вы не указали конкретный часовой пояс / местоположение, я не могу найти и дать вам точную информацию для вас.

1

Другие решения

Вы также можете использовать boost_datetime.

#include <iostream>
#include <boost/date_time/local_time/local_time.hpp>

using namespace boost::local_time;
using namespace boost::posix_time;

int main()
{
tz_database tz_db;
tz_db.load_from_file("/path_to_boost/boost/libs/date_time/data/date_time_zonespec.csv");
time_zone_ptr zone = tz_db.time_zone_from_region("America/New_York");
ptime t1 = zone->dst_local_start_time(2013);
ptime t2 = zone->dst_local_end_time(2013);
std::cout << t1 << std::endl;
std::cout << t2 << std::endl;
}

Некоторые связанные ссылки SO:
c ++ Как найти время в чужой стране с учетом перехода на летнее время?
Как вы получаете часовой пояс (смещение) для местоположения на определенную дату?

Но, как сказал ранее RedX, политика может изменить часовые пояса. Так что на самом деле ваше оригинальное решение имеет то преимущество, что оно автоматически обновляется с базовой ОС. Кроме того, вы можете улучшить свое существующее решение с помощью бинарного поиска.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector