Created
March 30, 2014 13:31
-
-
Save torazuka/9872873 to your computer and use it in GitHub Desktop.
Javaの夏時間対応を確認
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import static org.junit.Assert.assertEquals; | |
import java.time.*; | |
import java.time.format.DateTimeFormatter; | |
import org.junit.Test; | |
public class SummerTimeTest { | |
@Test | |
public void testBritishSummerTime() throws Exception { | |
DateTimeFormatter format = DateTimeFormatter | |
.ofPattern("yyyy/MMM/d a hh:mm zzzz"); | |
LocalDateTime winterDay = LocalDateTime | |
.of(2014, Month.MARCH, 29, 1, 00); | |
LocalDateTime summerDay = LocalDateTime | |
.of(2014, Month.MARCH, 30, 1, 00); | |
ZoneId gmt0 = ZoneId.of("GMT0"); | |
ZonedDateTime gmtWinter = ZonedDateTime.of(winterDay, gmt0); | |
ZonedDateTime gmtSummer = ZonedDateTime.of(summerDay, gmt0); | |
// 2014/3/29 午前 01:00 グリニッジ標準時 (GMT0) | |
System.out.printf("%s (%s)%n", gmtWinter.format(format), gmt0); | |
// 2014/3/30 午前 01:00 グリニッジ標準時 (GMT0) | |
System.out.printf("%s (%s)%n", gmtSummer.format(format), gmt0); | |
ZoneOffset gmtWinterOffset = gmtWinter.getOffset(); | |
ZoneOffset gmtSummerOffset = gmtSummer.getOffset(); | |
assertEquals("GMTでは、冬時間の日と夏時間の日のオフセットは同じ。", 0, | |
gmtWinterOffset.compareTo(gmtSummerOffset)); | |
ZoneId euro = ZoneId.of("Europe/London"); | |
ZonedDateTime euroWinter = gmtWinter.withZoneSameLocal(euro); | |
ZonedDateTime euroSummer = gmtSummer.withZoneSameLocal(euro); | |
// 2014/3/29 午前 01:00 グリニッジ標準時 (Europe/London) | |
System.out.printf("%s (%s)%n", euroWinter.format(format), euro); | |
// 2014/3/30 午前 02:00 英国夏時間 (Europe/London) | |
System.out.printf("%s (%s)%n", euroSummer.format(format), euro); | |
ZoneOffset euroWinterOffset = euroWinter.getOffset(); | |
ZoneOffset euroSummerOffset = euroSummer.getOffset(); | |
assertEquals("Europe/Londonでは、冬時間の日と夏時間の日のオフセットが異なる。", true, | |
0 < euroWinterOffset.compareTo(euroSummerOffset)); | |
assertEquals("Europe/London冬時間適用日のオフセットはゼロ", "Z", | |
euroWinterOffset.getId()); | |
assertEquals("Europe/London夏時間適用日のオフセットは+01:00", "+01:00", | |
euroSummerOffset.getId()); | |
} | |
@Test | |
public void testJapanSummerTime() throws Exception { | |
DateTimeFormatter format = DateTimeFormatter | |
.ofPattern("yyyy/MMM/d a hh:mm zzzz"); | |
LocalDateTime winterDay = LocalDateTime.of(1951, Month.MAY, 5, 2, 00); | |
LocalDateTime summerDay = LocalDateTime.of(1951, Month.MAY, 6, 2, 00); | |
ZoneId gmt0 = ZoneId.of("GMT0"); | |
ZonedDateTime gmtWinter = ZonedDateTime.of(winterDay, gmt0); | |
ZonedDateTime gmtSummer = ZonedDateTime.of(summerDay, gmt0); | |
// 1951/5/5 午前 02:00 グリニッジ標準時 (GMT0) | |
System.out.printf("%s (%s)%n", gmtWinter.format(format), gmt0); | |
// 1951/5/6 午前 02:00 グリニッジ標準時 (GMT0) | |
System.out.printf("%s (%s)%n", gmtSummer.format(format), gmt0); | |
ZoneOffset gmtWinterOffset = gmtWinter.getOffset(); | |
ZoneOffset gmtSummerOffset = gmtSummer.getOffset(); | |
assertEquals("GMTでは、冬時間の日と夏時間の日のオフセットは同じ。", 0, | |
gmtWinterOffset.compareTo(gmtSummerOffset)); | |
ZoneId tokyo = ZoneId.of("Asia/Tokyo"); | |
ZonedDateTime tokyoWinter = gmtWinter.withZoneSameLocal(tokyo); | |
ZonedDateTime tokyoSummer = gmtSummer.withZoneSameLocal(tokyo); | |
// 1951/5/5 午前 02:00 日本標準時 (Asia/Tokyo) | |
System.out.printf("%s (%s)%n", tokyoWinter.format(format), tokyo); | |
// 1951/5/6 午前 03:00 日本夏時間 (Asia/Tokyo) | |
System.out.printf("%s (%s)%n", tokyoSummer.format(format), tokyo); | |
ZoneOffset tokyoWinterOffset = tokyoWinter.getOffset(); | |
ZoneOffset tokyoSummerOffset = tokyoSummer.getOffset(); | |
assertEquals("Asia/Tokyoでは、冬時間の日と夏時間の日のオフセットが異なる。", true, | |
0 < tokyoWinterOffset.compareTo(tokyoSummerOffset)); | |
assertEquals("Asia/Tokyo冬時間適用日のオフセットは+09:00", "+09:00", | |
tokyoWinterOffset.getId()); | |
assertEquals("Asia/Tokyo夏時間適用日のオフセットは+10:00", "+10:00", | |
tokyoSummerOffset.getId()); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment