Skip to content

Instantly share code, notes, and snippets.

@torazuka
Created March 30, 2014 13:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save torazuka/9872873 to your computer and use it in GitHub Desktop.
Save torazuka/9872873 to your computer and use it in GitHub Desktop.
Javaの夏時間対応を確認
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