Skip to content

Commit 47aea59

Browse files
committed
Sort the available TimeZone IDs once.
1 parent 865a029 commit 47aea59

4 files changed

Lines changed: 13 additions & 4 deletions

File tree

src/main/java/org/apache/commons/lang3/time/FastDateParser.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
import java.util.regex.Pattern;
4545
import java.util.stream.Stream;
4646

47-
import org.apache.commons.lang3.ArraySorter;
4847
import org.apache.commons.lang3.CharUtils;
4948
import org.apache.commons.lang3.LocaleUtils;
5049
import org.apache.commons.lang3.StringUtils;
@@ -581,7 +580,7 @@ static boolean skipTimeZone(final String tzId) {
581580
}
582581
}
583582
// Order is undefined.
584-
for (final String tzId : ArraySorter.sort(TimeZone.getAvailableIDs())) {
583+
for (final String tzId : TimeZones.SORTED_AVAILABLE_IDS) {
585584
if (skipTimeZone(tzId)) {
586585
continue;
587586
}

src/main/java/org/apache/commons/lang3/time/TimeZones.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.time.ZoneId;
2121
import java.util.TimeZone;
2222

23+
import org.apache.commons.lang3.ArraySorter;
2324
import org.apache.commons.lang3.JavaVersion;
2425
import org.apache.commons.lang3.ObjectUtils;
2526
import org.apache.commons.lang3.SystemProperties;
@@ -82,6 +83,15 @@ public static TimeZone toTimeZone(final TimeZone timeZone) {
8283
return ObjectUtils.getIfNull(timeZone, TimeZone::getDefault);
8384
}
8485

86+
/**
87+
* The sorted available IDs.
88+
* <p>
89+
* Make a defensive copy, just in case.
90+
* </p>
91+
* @see TimeZone#getAvailableIDs()
92+
*/
93+
static final String[] SORTED_AVAILABLE_IDS = ArraySorter.sort(TimeZone.getAvailableIDs().clone());
94+
8595
/** Do not instantiate. */
8696
private TimeZones() {
8797
}

src/test/java/org/apache/commons/lang3/time/FastDateParser_TimeZoneStrategyTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ private void testTimeZoneStrategyPattern_TimeZone_getAvailableIDs(final Locale l
216216
Objects.requireNonNull(locale, "locale");
217217
assumeFalse(LocaleUtils.isLanguageUndetermined(locale), () -> toFailureMessage(locale, null, null));
218218
assumeTrue(LocaleUtils.isAvailableLocale(locale), () -> toFailureMessage(locale, null, null));
219-
for (final String id : ArraySorter.sort(TimeZone.getAvailableIDs())) {
219+
for (final String id : TimeZones.SORTED_AVAILABLE_IDS) {
220220
final TimeZone timeZone = TimeZones.getTimeZone(id);
221221
final String displayName = timeZone.getDisplayName(locale);
222222
final FastDateParser parser = new FastDateParser("z", timeZone, locale);

src/test/java/org/apache/commons/lang3/time/FastDatePrinterTimeZonesTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class FastDatePrinterTimeZonesTest extends AbstractLangTest {
3232
private static final String PATTERN = "h:mma z";
3333

3434
public static Stream<TimeZone> data() {
35-
return Stream.of(TimeZone.getAvailableIDs()).map(TimeZones::getTimeZone);
35+
return Stream.of(TimeZones.SORTED_AVAILABLE_IDS).map(TimeZones::getTimeZone);
3636
}
3737

3838
@ParameterizedTest

0 commit comments

Comments
 (0)