[tz] Did Greenland abolish daylight saving from 2024 on?

Paul Eggert eggert at cs.ucla.edu
Fri Nov 17 02:29:36 UTC 2023

On 11/16/23 14:43, Guy Harris wrote:

>> (2) is incompatible with POSIX if by "advanced" one means "greater offset from UT", since POSIX requires so-called "negative" DST for TZ settings like TZ='IST-1GMT0,M10.5.0,M3.5.0/1', the current Irish practice.
> So even POSIX, in effect, tells people "don't assume tm_isdst means 'this is daylight saving time'".

Not sure what is meant by "in effect". POSIX says "The value of tm_isdst 
shall be positive if Daylight Savings Time is in effect, 0 if Daylight 
Savings Time is not in effect, and negative if the information is not 

So the intent of POSIX is that tm_isdst>0 means daylight saving time. 
The DST offset from UT need not be greater than the standard-time 
offset. POSIX (and TZDB) even allow the two offsets to be equal, though 
there's not much use for that.

> POSIX does not appear to require that tzname[0] or tzname[1] retain the same values over time

That's true if you set TZ to a value like 'America/Detroit' because 
POSIX doesn't specify the behavior for such TZ settings. However, if you 
set TZ to a POSIX-specified value like 'IST-1GMT0,M10.5.0,M3.5.0/1' then 
tzname[0] and tzname[1] have specified values - in this case, "IST" and 
"GMT" respectively.

By the way, Draft 3 of the next POSIX standard requires support for TZDB 
Zones, e.g., TZ='Europe/London'.

> Requiring tm_zone may cause binary-compatibility issues for OSes that don't currently have it and for which the supplier seeks Single UNIX Specification certification.

There definitely are binary compatibility issues, since growing a struct 
is a hassle. This is true regardless of whether the system is SUS certified.

> That would raise the question of how long-lived a struct tm is.

That's reasonably straightforward. With localtime the char * member's 
lifetime survives until TZ is modified; this is what Draft 3 of the 
next POSIX standard says. On platforms with localtime_rz the member 
survives until the corresponding timezone_t is tzfree'd.

In hindsight perhaps tm_zone should have been char[TZNAME_MAX + 1] as 
that solves the lifetime problem (and lessens the temptation to read too 
much into those abbreviations :-), but it's too late to change this now.

More information about the tz mailing list