Boost logo

Boost Users :

Subject: [Boost-users] Question on Posix timezone string
From: Mats Webjörn/WIKAB (konsult_at_[hidden])
Date: 2018-12-28 20:34:19


I'm using Boost 1.66 and use the following code to get a Posix string to set my uCLinux TZ environment variable to get a local time from an UTC time

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

tz_database tz_db;
tz_db.load_from_file("./date_time_zonespec.csv");
time_zone_ptr nyc = tz_db.time_zone_from_region("Europe/Stockholm");
auto s = nyc->to_posix_string(); // "CET+01CEST+01,M3.5.0/02:00,M10.5.0/03:00"
setenv("TZ", s.c_str(), 1);

The odd thing is that my localtime becomes incorrect, and is actually 1 hr wrong on the opposite side of UTC.

But, when I read https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html it says

"The offset specifies the time value you must add to the local time to get a Coordinated Universal Time value".

Not add to UTC time, which seems like the Boost Posix string assumes !!!!!
Which explains why 16:00 UTC give 15:00 CET instead of 17:00 which is the correct value, when using localtime_r().

Am I missing something fundamentally, or what?

Regards

Mats Webjörn

Webjörn IngenjörsKonsult AB
Solhemsbackarna 75A
SE-163 56 SPÅNGA
Sweden



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net