Home / Programmazione / Java / Listare tutte le zone orario e gli offset UTC in Java
Mattepuffo

Listare tutte le zone orario e gli offset UTC in Java

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!