Listare tutte le zone orario e gli offset UTC in Java
In sostanza vogliamo ottenere una lista, ordinata, di tuttii fusi orari con gli offset UTC per ogni zona.
Useremo:
- una Map per l'ordinamento
- una Map che riempiremo con tutte le zone
- un ArrayList riempito in automatico con il metodo getAvailableZoneIds di ZoneId
L'output sarà simile al seguente:
Totale zone: 595
Etc/GMT+12 (UTC-12:00)
Pacific/Pago_Pago (UTC-11:00)
Pacific/Samoa (UTC-11:00)
Pacific/Niue (UTC-11:00)
US/Samoa (UTC-11:00)
Etc/GMT+11 (UTC-11:00)
Pacific/Midway (UTC-11:00)
Pacific/Honolulu (UTC-10:00)
Pacific/Rarotonga (UTC-10:00)
Pacific/Tahiti (UTC-10:00)
Pacific/Johnston (UTC-10:00)
US/Hawaii (UTC-10:00)
SystemV/HST10 (UTC-10:00)
Ovviemente ne ho messo solo una parte.
Questo il codice di esempio:
public class Zone {
public static void main(String[] argv) {
Map<String, String> sortedMap = new LinkedHashMap<>();
Map<String, String> allZoneIds = new HashMap<>();
ArrayList<String> list = new ArrayList<>(ZoneId.getAvailableZoneIds());
LocalDateTime dt = LocalDateTime.now();
for (String zoneId : list) {
ZoneId zone = ZoneId.of(zoneId);
ZonedDateTime zdt = dt.atZone(zone);
ZoneOffset zos = zdt.getOffset();
String offset = zos.getId().replaceAll("Z", "+00:00");
allZoneIds.put(zone.toString(), offset);
}
allZoneIds.entrySet()
.stream()
.sorted(Map.Entry.<String, String>comparingByValue().reversed())
.forEachOrdered(e -> sortedMap.put(e.getKey(), e.getValue()));
System.out.println("Totale zone: " + sortedMap.size() + "r");
sortedMap.forEach((k, v) -> {
String out = String.format("%35s (UTC%s) %n", k, v);
System.out.printf(out);
});
}
}
Enjoy!
java map arraylist zoneid getavailablezoneids
Commentami!