###はじめに
LocalDateのテストをしたので、ついでにLocalTimeも実施してみた。
ソースは、
https://github.com/xaatw0/quiita/blob/master/src/LocalTimeTest.java
###ソース
LocalTimeTest.java
@Test
public void now(){
//現在時刻を取得。テストするとエラーが出るのでしない。
LocalTime.now();
}
@Test
public void ofGet(){
// 11時23分
LocalTime t1123 = LocalTime.of(11, 23);
assertThat(t1123.getHour(), is(11));
assertThat(t1123.getMinute(), is(23));
// 11時23分45秒 と1ナノ秒
// 1ナノ秒 = 0.000 000 001秒
LocalTime t112345 = LocalTime.of(11, 23,45,1);
assertThat(t112345.getHour(), is(11));
assertThat(t112345.getMinute(), is(23));
assertThat(t112345.getSecond(), is(45));
assertThat(t112345.getNano(), is(1));
}
@Test
public void of_境界線(){
LocalTime.of(0, 0);
LocalTime.of(23, 59);
try {
// 24時は設定できず、DateTimeExceptionが発生する
LocalTime.of(24, 00);
Assert.fail();
}catch(DateTimeException ex){
}
}
@Test
public void staticFinal(){
// 深夜の固定値
LocalTime midnight = LocalTime.of(0, 0);
assertThat(midnight, is(LocalTime.MIDNIGHT));
// 正午の固定値
LocalTime noon = LocalTime.of(12, 0);
assertThat(noon, is(LocalTime.NOON));
}
@Test
public void between(){
LocalTime startTime = LocalTime.of(21, 30);
LocalTime endTime = LocalTime.of(23, 00);
// 分単位で差分を取得
long minutes = ChronoUnit.MINUTES.between(startTime, endTime);
assertThat(minutes, is(90L));
// 時間単位で差分を取得
long hours = ChronoUnit.HOURS.between(startTime, endTime);
assertThat(hours, is(1L));
// 秒単位で差分を取得
long seconds = ChronoUnit.SECONDS.between(startTime, endTime);
assertThat(seconds , is((long) 60 * 60 + 30 * 60));
}
@Test
public void between_overnight(){
// 開始時間の方が後ろの時間の場合、マイナスになる
LocalTime startTime = LocalTime.of(21, 30);
LocalTime endTime = LocalTime.of(20, 00);
long minutes = ChronoUnit.MINUTES.between(startTime, endTime);
assertThat(minutes, is(-90L));
long hours = ChronoUnit.HOURS.between(startTime, endTime);
assertThat(hours, is(-1L));
}
@Test
public void 深夜勤務の業務時間(){
// 22:30から6:00勤務で、7.5時間勤務(7 * 60 + 30分勤務)
LocalTime startTime = LocalTime.of(22, 30);
LocalTime endTime = LocalTime.of(6, 00);
long minutes = ChronoUnit.MINUTES.between(startTime, endTime);
assertThat(minutes, is(- 60L * 16 - 30));
assertThat(minutes + 24 * 60, is(7 * 60L + 30) );
}
@Test
public void parse(){
assertThat(LocalTime.parse("12:34", DateTimeFormatter.ISO_TIME)
, is(LocalTime.of(12,34)));
assertThat(LocalTime.parse("12:34", DateTimeFormatter.ISO_LOCAL_TIME)
, is(LocalTime.of(12,34)));
assertThat(LocalTime.parse("02:34", DateTimeFormatter.ISO_LOCAL_TIME)
, is(LocalTime.of(2,34)));
//「2:34」はエラー(parse_exception参照)
assertThat(LocalTime.parse("02:04", DateTimeFormatter.ISO_LOCAL_TIME)
, is(LocalTime.of(2,4)));
assertThat(LocalTime.parse("02:04:30", DateTimeFormatter.ISO_LOCAL_TIME)
, is(LocalTime.of(2,4,30)));
}
/**
* 「2:34」はエラー
*/
@Test(expected = DateTimeParseException.class)
public void parse_exception(){
LocalTime.parse("2:34", DateTimeFormatter.ISO_LOCAL_TIME);
}
@Test
public void format(){
assertThat(LocalTime.of(2,4).format(DateTimeFormatter.ISO_TIME), is("02:04:00"));
assertThat(LocalTime.of(12,34).format(DateTimeFormatter.ISO_TIME), is("12:34:00"));
assertThat(LocalTime.of(2,4,1).format(DateTimeFormatter.ISO_TIME), is("02:04:01"));
assertThat(LocalTime.of(12,34).format(DateTimeFormatter.ISO_LOCAL_TIME), is("12:34:00"));
}
@Test
public void isBeforeAfter(){
LocalTime time1 = LocalTime.of(1,0);
LocalTime time2 = LocalTime.of(2,0);
assertThat(time1.isBefore(time2), is(true));
assertThat(time2.isBefore(time1), is(false));
assertThat(time1.isAfter(time2), is(false));
assertThat(time2.isAfter(time1), is(true));
}
@Test
public void plusMinus(){
assertThat(LocalTime.NOON.plusHours(1), is(LocalTime.of(13, 0)));
assertThat(LocalTime.NOON.plusMinutes(1), is(LocalTime.of(12, 1)));
assertThat(LocalTime.NOON.plusSeconds(1), is(LocalTime.of(12, 0, 1)));
assertThat(LocalTime.NOON.plusNanos(1), is(LocalTime.of(12, 0, 0, 1)));
assertThat(LocalTime.NOON.minusHours(1), is(LocalTime.of(11, 0)));
assertThat(LocalTime.NOON.minusMinutes(1), is(LocalTime.of(11, 59)));
assertThat(LocalTime.NOON.minusSeconds(1), is(LocalTime.of(11, 59, 59)));
assertThat(LocalTime.NOON.minusNanos(1), is(LocalTime.of(11, 59, 59, 999999999)));
}
@Test
public void toSecondNanoOfDay(){
assertThat(LocalTime.of(1, 1, 1).toSecondOfDay(), is(60*60 + 60 + 1));
assertThat(LocalTime.of(0, 0, 1, 1).toNanoOfDay(), is(1000000001L));
}
@Test
public void with(){
LocalTime target = LocalTime.of(11, 23,45,1);
assertThat(target.withHour(0), is(LocalTime.of(0, 23,45,1)));
assertThat(target.withMinute(0), is(LocalTime.of(11, 0,45,1)));
assertThat(target.withSecond(0), is(LocalTime.of(11, 23,0,1)));
assertThat(target.withNano(0), is(LocalTime.of(11, 23,45)));
}