Я хочу получить по городу UTC и времени по Гринвичу без подчеркивания . Во-первых, я пишу, чтобы получить идентификаторы зоны:
List<String> utc = new ArrayList<>(ZoneId.getAvailableZoneIds());
List<String> gmt = new ArrayList<>(ZoneId.getAvailableZoneIds());
Но у меня есть подчеркивание, и я перехожу на пустое место:
List<String> newList_utc = new ArrayList<>();
List<String> newList_gmt = new ArrayList<>();
for (String anUtc : utc) {
if (anUtc.contains("_")) {
newList_utc.add(anUtc.replace("_", " "));
} else {
newList_utc.add(anUtc);
}
}
for (String aGmt : gmt) {
if (aGmt.contains("_")) {
newList_gmt.add(aGmt.replace("_", " "));
} else {
newList_gmt.add(aGmt);
}
}
После разделения у меня есть конкретный город, например - El Salvador
. До разбиения и изменения был America/El_Salvador
в качестве формата.
И я использую следующий код для вывода часовых поясов со смещением:
newList_utc.stream().filter(it -> it.contains("El Salvador")).collect(Collectors.toList());
newList_utc.stream().filter(it -> it.contains("America/El Salvador")).map(Class::getOffset).collect(Collectors.toList());
...
...
private static String getOffset(String zone) {
ZonedDateTime zdt = LDT.atZone(ZoneId.of(zone));
return zdt.getOffset().getId().replace("Z", "+00:00");
}
Наконец, я получаю сообщение об ошибке:
java.time.DateTimeException: Invalid ID for region-based ZoneId, invalid format: America/El Salvador
at java.time.ZoneRegion.checkName(ZoneRegion.java:151)
at java.time.ZoneRegion.ofId(ZoneRegion.java:116)
at java.time.ZoneId.of(ZoneId.java:411)
at java.time.ZoneId.of(ZoneId.java:359)
at project.Bot.getOffset(Bot.java:5822)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at project.Bot.getOutputZone(Bot.java:6070)
at project.Bot.getTimeZone(Bot.java:6041)
at project.Bot.onUpdateReceived(Bot.java:399)
Во время отладки это происходит из-за метода getOffset()
в этой строке ZonedDateTime zdt = LDT.atZone(ZoneId.of(zone));
, где я установил America/El Salvador
. Если я напишу America/El_Salvador
, то у меня нет этой проблемы.
Но почему я не могу использовать пустое место вместо подчеркивания?