Получить часовой пояс области с кодом страны в Java
Я должен передать сообщение (jms) с информацией о часовом поясе, например (America/Los_Angeles), но у меня есть только название страны и код. Если это возможно, получите информацию о часовом поясе с кодом Java. Где-то я читал это:
System.out.println(TimeZone.getTimeZone("US"));
Но его выдача как
sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
Я ожидаю Список "Америка /Los_Angeles", ...
2 ответа
Согласно документации getTimeZone
метод возвращает указанное TimeZone
, или GMT
зона, если данный идентификатор не может быть понят. Там нет идентификатора TimeZone под названием США, следовательно, он дает зону GMT. Если вы действительно хотите получить весь список часовых поясов, доступных в США, я бы предложил вам использовать следующее.
final List<String> timeZonesInUS = Stream.of(TimeZone.getAvailableIDs())
.filter(zoneId -> zoneId.startsWith("US")).collect(Collectors.toList());
Встроенные классы Java не предлагают этого, но класс TimeZone ICU делает, и TimeZone.getAvailableIDs("US")
дает правильный ответ.
Если я правильно понимаю, похоже, вы просто хотите получить список часовых поясов из данной страны. На этом сайте есть список всех стран, имеющих собственный код:
https://garygregory.wordpress.com/2013/06/18/what-are-the-java-timezone-ids/
Изучение API для часовых поясов показывает, что невозможно получить список часовых поясов напрямую через TimeZone.getTimeZone()
, Таким образом, вместо этого вы, вероятно, захотите пройтись по ним и просто посмотреть, какие из них начинаются с названия страны и добавить их в список, например так:
public static List<String> GetZones(String country) {
List<String> zones = new ArrayList<>();
for (String i : TimeZone.getAvailableIDs()) {
if (i.startsWith(country)) {
zones.add(i);
}
}
return zones;
}