Летнее время текущего тз - PullRequest
2 голосов
/ 17 июня 2010

в моем программном обеспечении c ++ я использовал Boost в некоторых частях, а также для местного времени.Хорошо, теперь моя проблема состоит в том, чтобы проверить, активен ли мой компьютер или нет DST.

С помощью следующей части кода я могу узнать только разницу от времени UTC.В моем случае разница составляет 2 часа, потому что активна DST

ptime tLoc = second_clock::local_time();
ptime tUTC = second_clock::universal_time();
time_duration tDiff = tUTC - tLoc;
local_time_zone = tDiff.hours();

Я думаю, что логическая функция has_dst () может помочь, верно?

Моя система - Debian GNU / Linux.

Спасибо

Ответы [ 2 ]

2 голосов
/ 17 июня 2010

Посмотрите на простые функции C во времени. Ч / ctime

по местному времени вернет структуру tm *

struct tm имеет в качестве последнего поля флаг, указывающий, находится ли он под DST или нет.

1 голос
/ 19 июня 2010

Я считаю, что функция, которую вы ищете, - local_date_time_base<>::is_dst().Все типы данных date_time в Boost.DateTime являются производными от local_date_time_base<>.Следующее должно дать вам требуемый результат:

namespace lt = boost::local_time;

// for example, use central time zone
lt::time_zone_ptr zone(new lt::posix_time_zone(
    "CST-06:00:00CDT+01:00:00,M3.2.0/02:00:00,M11.1.0/02:00:00"));
lt::local_date_time tloc = lt::local_sec_clock::local_time(zone);

std::cout << "I'm " << (tloc.is_dst() ? "" : "not ") << "in DST";
...