[tz] OpenJDK/CLDR/ICU/Joda issues with Ireland change

Guy Harris guy at alum.mit.edu
Thu Jan 25 21:28:08 UTC 2018


On Jan 25, 2018, at 3:25 AM, Stephen Colebourne <scolebourne at joda.org> wrote:

> - CLDR provides data on zone names, keyed by "generic", "standard", "daylight".
> 
> - For Ireland, CLDR states that "standard" = winter = "Greenwich Mean Time"
> - For Ireland, CLDR states that "daylight" = summer = "Irish Standard Time"

OK, so:

1. The ISO C API (localtime()) has a notion of "Daylight Saving Time" being in effect or not in effect, which controls whether tm_isdst is set or not. "Daylight Saving Time" presumably refers to turning clocks forward.  Neither C90, C99, nor C11 use the term "standard time" anywhere that I can see, so there does not seem to be any problem with "Daylight Saving Time" being "standard time".  I don't see a problem with ISO C setting tm_isdst to 1 for Irish Standard Time.

2. The Single UNIX Specification inherits the above from the ISO C standard.

It also defines a variable named timezone, which "shall be set to the difference, in seconds, between Coordinated Universal Time (UTC) and local standard time."  That *does* raise the question of what "local standard time" is for Ireland - is it the time that prevails when "summer time" isn't in effect, or is it the time that Irish law refers to as standard time, as the two are different?

Its description of the TZ environmental variable says that the POSIX syntax is:

	The expanded format (for all TZ s whose value does not have a <colon> as the first character) is as follows:

		stdoffset[dst[offset][,start[/time],end[/time]]]


	Where:

	std and dst
		Indicate no less than three, nor more than {TZNAME_MAX}, bytes that are the designation for the standard (std) or the alternative (dst -such as Daylight Savings Time) timezone. Only std is required; if dst is missing, then the alternative time does not apply in this locale.

which suggests that Irish Standard Time wouldn't be local standard time in Ireland, GMT/UTC would be local standard time in the POSIX sense.

If so, that means that there wouldn't be a problem with timezone being set to 0 for Europe/Dublin.  Should the POSIX folk be asked for an interpretation here?  (And, while we're at it, should we ask them what "local standard time" refers to, given that a given location may choose to switch from one time zone to another?)

3. The CLDR says that "standard" means "winter" and "daylight" means "summer":

	http://cldr.unicode.org/translation/timezones

so, for the CLDR, Irish Standard Time isn't standard time.

4. The ICU C++ API's TimeZone class:

	http://icu-project.org/apiref/icu4c/classicu_1_1TimeZone.html

speaks of "Daylight Saving Time", which presumably refers to turning clocks forward.

5. The Java SE 7 TimeZone class:

	https://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html

seems to say the same thing.

6. The ICU Java API's TimeZone class:

	http://icu-project.org/apiref/icu4j/com/ibm/icu/util/TimeZone.html

also speaks of "standard" and "daylight", so Irish Standard Time is presumably daylight time rather than standard time.

So all those appear to be assuming that, if there's any (semi-)regular time adjustment during the year, it involves turning the clocks forward some time in spring or summer, switching to "daylight" or "Daylight Saving" or "Daylight Savings" time, and turning the clocks backward some time in fall/autumn or winter, switching to what some but not all call "standard" time.  For now, that suggests Europe/Dublin should have an offset of 0 from UTC and with the current winter time abbreviation being "GMT" or whatever's appropriate and the current summer time abbreviation being "IST".  I.e., leave it alone for now.

Perhaps they all need to make a definitive statement about what "daylight" time means, and, if they offer some notion of a "standard" offset from UTC, what the "standard" offset should be for Ireland.  (Then they need to be asked what to do about tzdb regions that move from one time zone to another, changing what would presumably be deemed the standard offset.)  If the don't choose to say "sorry, Irish Standard Time isn't the standard time in Ireland", they may need to introduce new APIs to get information about "the *real* standard time" as opposed to APIs that get information about "the time that's what you have when you're not in daylight/Daylight Saving/Daylight Savings/summer time".  Providing *that* information in the tzdb would probably involve changes to the source and binary formats.


More information about the tz mailing list