第5章 日付と時刻の新たな API : 問題 9 : 分の端数がある時差
問題
全てのタイムゾーンおいて、UTC との時差に1時間未満の情報が含まれる全てのタイムゾーンを見つけよ
解答
“1時間未満の情報が含まれる” とは、「時差が1時間より小さい」ということではなく、「時差に分の端数が出る」という意味だと解釈した
では、時差に分の端数があるタイムゾーンを求めてみよう
LocalDateTime now = LocalDateTime.now(); ZonedDateTime utcNow = ZonedDateTime.of(now, Clock.systemUTC().getZone()); ZoneId.getAvailableZoneIds().stream() .map(ZoneId::of) // ゾーンID .map(zone -> ZonedDateTime.of(now, zone)) // そのゾーンIDの日付時間 .filter(time -> Duration.between(time, utcNow).toMinutes() % 60 != 0) // 分の端数がある // .peek(time -> System.out.print(format(Duration.between(time, utcNow)) + ", ")) // デバッグ用 .map(ZonedDateTime::getZone) // ゾーンIDに戻す .forEach(System.out::println);
私の JDK(1.8.0_20) では、以下のとおり
-9:30, Pacific/Marquesas -4:30, America/Caracas -2:30, America/St_Johns -2:30, Canada/Newfoundland +4:30, Asia/Kabul +4:30, Asia/Tehran +4:30, Iran +5:30, Asia/Calcutta +5:30, Asia/Colombo +5:30, Asia/Kolkata +5:45, Asia/Kathmandu +5:45, Asia/Katmandu +6:30, Asia/Rangoon +6:30, Indian/Cocos +9:30, Australia/Adelaide +9:30, Australia/Broken_Hill +9:30, Australia/Darwin +8:45, Australia/Eucla +9:30, Australia/North +9:30, Australia/South +9:30, Australia/Yancowinna +10:30, Australia/LHI +10:30, Australia/Lord_Howe +11:30, Pacific/Norfolk +12:45, NZ-CHAT +12:45, Pacific/Chatham