import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.TimeZone;
import java.util.TreeMap;

public class TzNameTest {
    TzNameTest(String[] tzNames) {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy MM dd zzz");
        for (String tzName : tzNames) {
            TimeZone tz = TimeZone.getTimeZone(tzName);
            ZoneId zid = tz.toZoneId();
            int year = ZonedDateTime.now().getYear();
            if (System.getProperty("zdt.year") != null) {
                try {
                    year = Integer.parseInt(System.getProperty("zdt.year"));
                } catch (NumberFormatException nfe) {
                }
            }
            System.out.println(tzName + " useDaylightTime=" + tz.useDaylightTime());
            ZonedDateTime zdt = ZonedDateTime.of(
                    year, 1, 1, 0, 0, 0, 0, zid);
            ZonedDateTime zdtMax = zdt.plusYears(1);
            TreeMap<String, Integer> map = new TreeMap<>();
            while (zdt.isBefore(zdtMax)) {
                String s = dtf.format(zdt);
                if (map.containsKey(s)) {
                    map.put(s, map.get(s) + 1);
                } else {
                    map.put(s, 1);
                }
                zdt = zdt.plusHours(1);
            }
            for (String s : map.keySet().toArray(new String[0])) {
                if (map.get(s) != 24) {
                    System.out.println(s + " " + map.get(s));
                } else {
                    map.remove(s);
                }
            }
        }
    }

    public static void main(String[] args) {
        if (args.length == 0) {
            new TzNameTest(TimeZone.getAvailableIDs());
        } else {
            new TzNameTest(args);
        }
    }
}
