2016-01-06 7 views
0

Как получить текущее время на моем Linux-сервере и преобразовать его в заданный часовой пояс (например, MST-7) в boost C++? Я хочу, чтобы это экономичное время суток было рассчитано автоматически.конвертировать текущее время сервера в часовой пояс с помощью dst с boost

Если я запускаю следующий код, ДСТ не считается:

boost::posix_time::ptime currentTime = boost::posix_time::second_clock::local_time(); 
date today = day_clock::local_day(); 
time_zone_ptr phx_tz(new posix_time_zone("MST-07:00:00")); 
local_date_time phx_departure(currentTime, phx_tz); 

ответ

0

Вы можете указать информацию ДСТ в вашем определении TIME_ZONE:

time_zone_ptr phx_tz(new posix_time_zone("MST-07MDT01:00:00,M3.2.0/02:00:00,M11.1.0/02:00:00")); 
2

Реальный ответ на этот вопрос: НЕ.

Я процитирую свой ответ от Daylight saving time and time zone best practices:

  • При использовании C++, не забудьте использовать библиотеку, которая использует надлежаще реализует IANA timezone database. К ним относятся cctz, ICU и Howard Hinnant's "tz" library.
    • Не используйте Boost для преобразования часового пояса. В то время как its API утверждает, что поддерживает стандартные идентификаторы IANA (aka «zoneinfo»), он crudely maps them фиксированным смещениям без учета богатой истории изменений, которые могут иметь каждая зона. (Кроме того, файл выпал из эксплуатации.)

Считают, что последний коммит в файл зоны времени повышающего от 24 июня 2011, так что даже с плохо разработанной API и реализации что у них есть, он даже не выполняет свои собственные обещания, потому что он не знает изменений в часовых поясах за последние 5 лет!

Кроме того, вы действительно не должны использовать часовые пояса POSIX. У них есть много недостатков и их следует обескуражить. См. Раздел о часовых поясах POSIX в the timezone tag wiki. Вместо этого вы должны использовать правильный идентификатор часового пояса IANA/Olson, который будет America/Denver для часового пояса США (с DST) или America/Phoenix для части Аризоны, которая не использует DST.

+0

Спасибо за ваш повтор. Я думаю об использовании библиотеки ICU вместо повышения. Знаешь ли ты знакомство? Моя забота - как получить автоматические обновления для часового пояса. Знаете ли вы, достаточно ли для обновления каталога zoneinfo через обновления linux или мне нужно обновить библиотеку ICU? Является ли ICU загружать часовые пояса непосредственно из/usr/share/zoneinfo? – Shay

+0

Если вам не нужна локализация, просто конверсии tz, вам, вероятно, будет лучше с cctz или hh lib. Не уверен в ваших конкретных вопросах. Прочтите документы или попробуйте, или задайте здесь новый вопрос. –