boostorg / boostorg/date_time

to_posix_string() returns invalid timezone string

Open
#94 4 comments 1 reaction 0 assignees View on GitHub
Dominant language
C++
Stars
70
Forks
99
PR merge metrics
No merged PRs in 30d

Description

The following code
`
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();
setenv("TZ", s.c_str(), 1);
`
will set TZ to "CET+01CEST+01,M3.5.0/02:00,M10.5.0/03:00" which will cause Stockholm local time to be 10:00:00 when UTC(GMT/London) time is 11:00:00 which clearly is incorrect.

ANSI/IEEE Std 1003.1 section **8.3 Other Environment Variables** reads for **TZ** variable

Offset Indicates the value added to the local time to arrive at Coordinated Universal Time

[gnu.org](https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html) reads the same
It also says regarding offset
> This is positive if the local time zone is west of the Prime Meridian and negative if it is east.
>

But Boost 1.69 [date-time](https://www.boost.org/doc/libs/1_69_0/doc/html/date_time/local_time.html) says

> A posix_time_zone is unique in that the object is created from a Posix time zone string (IEEE Std 1003.1). A POSIX time zone string takes the form of:
"std offset dst [offset],start[/time],end[/time]" (w/no spaces).
'std' specifies the abbrev of the time zone. 'offset' is the offset from UTC.
"PST-8PDT01:00:00,M4.1.0/02:00:00,M10.1.0/02:00:00"
"PST-8PDT,M4.1.0,M10.1.0"
These two are actually the same specification (defaults were used in the second string). This zone lies eight hours west of GMT …”
>
If I add -8 to a PST local time I will NOT get GMT=UTC time!! It seems like somewhere here (most likely in to_posix_string()) is a huge bug since the Posix/GNU and Boost interpretation of the Posix timezone strings contradict each other.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.