Skip to content

Conversation

@garydgregory
Copy link
Member

[LANG-1786] A lot of warnings on the console when using FastDateFormat
with JDK25

Add and use TimeZones.getTimeZone(String) as a way to avoid writing to the console on Java 25:

    /**
     * Delegates to {@link TimeZone#getTimeZone(String)} after mapping an ID if it's in {@link ZoneId#SHORT_IDS}.
     * <p>
     * On Java 25, calling {@link TimeZone#getTimeZone(String)} with an ID in {@link ZoneId#SHORT_IDS} writes a message to {@link System#err} in the form:
     * </p>
     *
     * <pre>
     * WARNING: Use of the three-letter time zone ID "the-short-id" is deprecated and it will be removed in a future release
     * </pre>
     * <p>
     * You can disable mapping from {@link ZoneId#SHORT_IDS} by setting the system property {@code "TimeZones.mapShortIDs=false"}.
     * </p>
     *
     * @param id Same as {@link TimeZone#getTimeZone(String)}.
     * @return Same as {@link TimeZone#getTimeZone(String)}.
     * @since 3.20.0
     */
    public static TimeZone getTimeZone(final String id) {
        return TimeZone.getTimeZone(mapShortIDs() ? ZoneId.SHORT_IDS.getOrDefault(id, id) : id);
    }

Before you push a pull request, review this list:

  • Read the contribution guidelines for this project.
  • Read the ASF Generative Tooling Guidance if you use Artificial Intelligence (AI).
  • I used AI to create any part of, or all of, this pull request.
  • Run a successful build using the default Maven goal with mvn; that's mvn on the command line by itself.
  • Write unit tests that match behavioral changes, where the tests fail if the changes to the runtime are not applied. This may not always be possible, but it is a best practice.
  • Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
  • Each commit in the pull request should have a meaningful subject line and body. Note that a maintainer may squash commits during the merge process.

FastDateFormat on Java 25

- Add TimeZones.getTimeZone(String) to map deprecated ZoneId#SHORT_IDS
- Avoids messages to System.err from the JRE's
TimeZone.getTimeZone(String) starting on Java 25
- Calls to TimeZone.getTimeZone(String) are now delegated to
TimeZones.getTimeZone(String)
- You can disable mapping from ZoneId#SHORT_IDS by setting the system
property "TimeZones.mapShortIDs=false"
@garydgregory garydgregory changed the title Lang 1786 tz map deprecated short ids [LANG-1786] Map deprecated TimeZone short IDs and avoid JRE WARNINGs to the console Nov 7, 2025
FastDateFormat on Java 25

- Only enable on Java 25 and up
@garydgregory garydgregory merged commit c9ff6aa into apache:master Nov 7, 2025
64 of 84 checks passed
@garydgregory garydgregory deleted the LANG-1786_tz_map_deprecated_short_ids branch November 7, 2025 16:33
garydgregory added a commit that referenced this pull request Nov 7, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants