Нужен часовой пояс на основе кода страны ISO и города на Java - PullRequest
0 голосов
/ 11 октября 2019

Мое требование

::: Найти часовой пояс на основе кода города и страны. Пожалуйста, поделитесь Есть ли способ найти его? Я не хочу идти с городом только потому, что один город может существовать в двух или более странах.

И даже по городским базам - я могу найти часовой пояс, но не для всех городов, если въезжаю в Лидс (Великобритания). город), ничего не давая.

Set<String> availableTimeZones = ZoneId.getAvailableZoneIds();


    String cityName = Normalizer.normalize(city, Normalizer.Form.NFKD).replaceAll("[^\\p{ASCII}-_ ]", "")
            .replace(' ', '_');

    List<String> possibleTimeZones = availableTimeZones.stream().filter(zid -> zid.endsWith("/" + cityName))
            .collect(Collectors.toList());

1 Ответ

0 голосов
/ 15 октября 2019
Rough way I found to achieve is -

private static String getSourceLocalTimeZone(String countryCode, String city, String sourceLocalTimeZone) {
        String[] timeZones = com.ibm.icu.util.TimeZone.getAvailableIDs(countryCode);

        for (String timeZone : timeZones) {
            String cityFromTimeZone = null;
            String[] value = timeZone.split("/");
            if (value != null && value.length > 0) {
                cityFromTimeZone = value[value.length - 1].replace("_", " ");
            }
            if (city!=null && city.matches("(.*)" + cityFromTimeZone + "(.*)")) {
                sourceLocalTimeZone = timeZone;
                break;
            }

        }
        if (sourceLocalTimeZone == null || (sourceLocalTimeZone.isEmpty())) {
            if(timeZones.length>0)
            sourceLocalTimeZone = timeZones[0];
        }
        return sourceLocalTimeZone;
    }

Dependency -
<dependency>
            <groupId>com.ibm.icu</groupId>
            <artifactId>icu4j</artifactId>
            <version>4.6</version>
        </dependency>
...