package com.logicbig.example.zoneoffset;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoField;
import java.time.temporal.TemporalQuery;
import java.util.ArrayList;
import java.util.List;
public class QueryExample2 {
public static void main(String... args) {
ZoneOffset z = ZonedDateTime.now().getOffset();
System.out.println(z);
List<ZoneId> list = z.query(zonesOfSameOffsets);
list.forEach(System.out::println);
}
static TemporalQuery<List<ZoneId>> zonesOfSameOffsets = temporal -> {
List<ZoneId> zones = new ArrayList<>();
if (temporal.isSupported(ChronoField.OFFSET_SECONDS)) {
ZoneOffset z = ZoneOffset.from(temporal);
for (String s : ZoneOffset.getAvailableZoneIds()) {
ZoneId zid = ZoneId.of(s);
ZoneOffset offset = zid.getRules()
.getOffset(Instant.now());
if (z.compareTo(offset)==0) {
zones.add(zid);
}
}
}
return zones;
};
}
Output
-05:00
America/Panama
America/Chicago
America/Eirunepe
Etc/GMT+5
Pacific/Easter
Mexico/General
America/Porto_Acre
America/Guayaquil
America/Rankin_Inlet
US/Central
America/Rainy_River
America/Indiana/Knox
America/North_Dakota/Beulah
America/Monterrey
America/Jamaica
America/Atikokan
America/Coral_Harbour
America/North_Dakota/Center
America/Cayman
America/Indiana/Tell_City
Chile/EasterIsland
America/Mexico_City
America/Matamoros
CST6CDT
America/Knox_IN
America/Bogota
America/Menominee
America/Resolute
SystemV/EST5
Canada/Central
America/Port-au-Prince
Brazil/Acre
America/Cancun
America/Lima
America/Bahia_Banderas
US/Indiana-Starke
America/Rio_Branco
SystemV/CST6CDT
Jamaica
America/Merida
America/North_Dakota/New_Salem
America/Winnipeg