RFR: 8285844: TimeZone.getTimeZone(ZoneOffset) does not work for all ZoneOffsets and returns GMT unexpected [v2]
Naoto Sato
naoto at openjdk.java.net
Tue May 10 17:46:55 UTC 2022
On Tue, 10 May 2022 13:12:10 GMT, Jaikiran Pai <jpai at openjdk.org> wrote:
>> Naoto Sato has updated the pull request incrementally with one additional commit since the last revision:
>>
>> Fixed offsets in milliseconds, added test variations, refined Custom ID definitions
>
> src/java.base/share/classes/java/util/TimeZone.java line 109:
>
>> 107: * <blockquote><pre>
>> 108: * <a id="NormalizedCustomID"><i>NormalizedCustomID:</i></a>
>> 109: * {@code GMT} <i>Sign</i> <i>TwoDigitHours</i> {@code :} <i>Minutes</i> [<i>Seconds</i>]
>
> Hello Naoto,
>
> Should this instead be: `... <i>Minutes</i> [{@code :} <i>Seconds</i>]` - i.e. should it have the `:` literal if seconds are present in the custom timezone id?
The colon is included in `Seconds` part below. I changed the part name to `ColonSeconds` to make it clearer.
> src/java.base/share/classes/java/util/TimeZone.java line 543:
>
>> 541: return new ZoneInfo(totalSecs == 0 ? "UTC" : GMT_ID + tzid, totalSecs);
>> 542: } else {
>> 543: return getTimeZone(tzid, true);
>
> Before the change in this PR, we used to prefix `GMT` to (non-custom timezone ids) if the timezone id returned by `ZoneId#getId()` started with the `+` or `-` sign, before calling `getTimeZone(modifiedTzid, true)`.
> With this change, for `ZoneId`s that aren't `ZoneOffset` instance, we now call `getTimeZone(originalTzid, true)`, without first checking/prefixing the id with `GMT`. Is that an intentional change and would that potentially cause `getTimeZone(String, boolean)` to return a different result?
Yes, it is intentional. The `Time-zone IDs` section in the `ZoneId` class description is clear that zone id starting with "+/-" is a `ZoneOffset` instance. Other ZoneIds should have offsets with prefix or region-based ids.
-------------
PR: https://git.openjdk.java.net/jdk/pull/8606
More information about the core-libs-dev
mailing list