Java8 Date and Time API (LocalDateTime)
Java8 Date and Time APIのLocalDateTimeメモです。
Java8で追加となったData and Time APIのLocalDateTimeを触ってみました。
Javaの使いにくかったDateクラスやCalendarクラスに代わり、
Joda Timeを元に開発されました。
- now() 現在時刻
- of() 日時指定して取得
- of(int year, int month, int dayOfMonth, int hour, int minute, int second)
- of(int year, Month month, int dayOfMonth, int hour, int minute, int second)
- of(int year, int month, int dayOfMonth, int hour, int minute)
- of(int year, Month month, int dayOfMonth, int hour, int minute)
- of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond)
- of(int year, Month month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond)
- of(LocalDate date, LocalTime time)
- from() 時間的オブジェクトから取得
- parse() 文字列から取得
- getXXX() 各フィールドの取得
- get() フィールドを指定して取得
- get(ChronoField.ERA)
- get(ChronoField.YEAR)
- get(ChronoField.DAY_OF_YEAR)
- get(ChronoField.MONTH_OF_YEAR)
- get(ChronoField.DAY_OF_MONTH)
- get(ChronoField.DAY_OF_WEEK)
- get(ChronoField.HOUR_OF_DAY)
- get(ChronoField.HOUR_OF_AMPM)
- get(ChronoField.AMPM_OF_DAY)
- get(ChronoField.MINUTE_OF_HOUR)
- get(ChronoField.MINUTE_OF_DAY)
- get(ChronoField.SECOND_OF_MINUTE)
- get(ChronoField.MILLI_OF_SECOND)
- get(ChronoField.MICRO_OF_SECOND)
- get(ChronoField.NANO_OF_SECOND)
- withXXX() フィールドの値を変更して取得
- with() フィールドを指定して値を変更
- with(ChronoField.ERA, long newValue)
- with(ChronoField.YEAR, long newValue)
- with(ChronoField.DAY_OF_YEAR, long newValue)
- with(ChronoField.MONTH_OF_YEAR, long newValue)
- with(ChronoField.DAY_OF_MONTH, long newValue)
- with(ChronoField.DAY_OF_WEEK, long newValue)
- with(ChronoField.HOUR_OF_DAY, long newValue)
- with(ChronoField.HOUR_OF_AMPM, long newValue)
- with(ChronoField.AMPM_OF_DAY, long newValue)
- with(ChronoField.MINUTE_OF_HOUR, long newValue)
- with(ChronoField.MINUTE_OF_DAY, long newValue)
- with(ChronoField.SECOND_OF_MINUTE, long newValue)
- with(ChronoField.MILLI_OF_SECOND, long newValue)
- with(ChronoField.MICRO_OF_SECOND, long newValue)
- with(ChronoField.NANO_OF_SECOND, long newValue)
- with(adjuster) アジャスタを指定して取得
- with(LocalDate)
- with(LocalTime)
- with(TemporalAdjusters.dayOfWeekInMonth())
- with(TemporalAdjusters.firstDayOfMonth())
- with(TemporalAdjusters.firstDayOfNextMonth())
- with(TemporalAdjusters.firstDayOfNextYear())
- with(TemporalAdjusters.firstInMonth())
- with(TemporalAdjusters.lastDayOfMonth())
- with(TemporalAdjusters.lastDayOfYear())
- with(TemporalAdjusters.lastInMonth())
- with(TemporalAdjusters.next())
- with(TemporalAdjusters.nextOrSame())
- with(TemporalAdjusters.previous())
- with(TemporalAdjusters.previousOrSame())
- plus() 加算
- minus() 減算
- isAfter(), isBefore(), isEqual() 比較
now() 現在時刻
now()
now()でデフォルトタイムゾーンの現在日時を取得。
// 現在時刻
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
now(ZoneId zone)
now(ZoneId zone)で指定したタムゾーンの現在日時を取得。
// 現在時刻(タイムゾーン指定) LocalDateTime nowTokyo = LocalDateTime.now(ZoneId.of("Asia/Tokyo")); System.out.println(nowTokyo); LocalDateTime nowNewYork = LocalDateTime.now(ZoneId.of("America/New_York")); System.out.println(nowNewYork);
now(Clock clock)
now(Clock clock)で指定したクロックの現在時刻を取得。
// 現在時刻(デフォルトタイムゾーンのシステムクロック) LocalDateTime nowSystem = LocalDateTime.now(Clock.systemDefaultZone()); System.out.println(nowSystem); // 現在時刻(UTCタイムゾーンのシステムクロック) LocalDateTime nowUtc = LocalDateTime.now(Clock.systemUTC()); System.out.println(nowUtc);
of() 日時指定して取得
of(int year, int month, int dayOfMonth, int hour, int minute, int second)
年月日 時分秒を指定してLocalDateTimeを取得。
// 年月日 時分秒 LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 12, 55, 10); assertThat(dateTime.toString()).isEqualTo("2016-09-25T12:55:10");
of(int year, Month month, int dayOfMonth, int hour, int minute, int second)
年月日 時分秒(列挙型Month)を指定してLocalDateTimeを取得。
// 年月日 時分秒 (列挙型Month) LocalDateTime dateTime2 = LocalDateTime.of(2016, Month.SEPTEMBER, 25, 12, 55, 10); assertThat(dateTime2.toString()).isEqualTo("2016-09-25T12:55:10");
of(int year, int month, int dayOfMonth, int hour, int minute)
年月日 時分を指定してLocalDateTimeを取得。
// 年月日 時分 LocalDateTime dateTime3 = LocalDateTime.of(2016, 9, 25, 12, 55); assertThat(dateTime3.toString()).isEqualTo("2016-09-25T12:55");
of(int year, Month month, int dayOfMonth, int hour, int minute)
年月日 時分(列挙型Month)を指定してLocalDateTimeを取得。
// 年月日 時分 (列挙型Month) LocalDateTime dateTime4 = LocalDateTime.of(2016, Month.SEPTEMBER, 25, 12, 55); assertThat(dateTime4.toString()).isEqualTo("2016-09-25T12:55");
of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond)
年月日 時分秒ナノ秒を指定してLocalDateTimeを取得。
// 年月日 時分秒ナノ秒 LocalDateTime dateTime5 = LocalDateTime.of(2016, 9, 25, 12, 55, 10, 123_456_789); assertThat(dateTime5.toString()).isEqualTo("2016-09-25T12:55:10.123456789");
of(int year, Month month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond)
年月日 時分秒ナノ秒(列挙型Month)を指定してLocalDateTimeを取得。
// 年月日 時分秒ナノ秒 (列挙型Month) LocalDateTime dateTime6 = LocalDateTime.of(2016, Month.SEPTEMBER, 25, 12, 55, 10, 123_456_789); assertThat(dateTime6.toString()).isEqualTo("2016-09-25T12:55:10.123456789");
of(LocalDate date, LocalTime time)
LocalDate ,LocalTimeを指定してLocalDateTimeを取得。
// LocalDate + LocalTime LocalDate date = LocalDate.of(2016, 9, 25); LocalTime time = LocalTime.of(12, 55, 10); LocalDateTime dateTime7 = LocalDateTime.of(date, time); assertThat(dateTime7.toString()).isEqualTo("2016-09-25T12:55:10");
from() 時間的オブジェクトから取得
from(TemporalAccessor temporal)
from()で他の時間的オブジェクトからLocalDateTimeを取得。
時間的オブジェクトはTemporalAccessorインターフェースを実装したクラスで、
Date and Time APIの日付、時間クラスが実装しています。
// LocalDateTimeから取得 LocalDateTime from = LocalDateTime.of(2016, 9, 25, 12, 55, 10); LocalDateTime to = LocalDateTime.from(from); assertThat(to.toString()).isEqualTo("2016-09-25T12:55:10"); // LocalDateから取得 LocalDate fromDate = LocalDate.of(2016, 9, 25); LocalDate toDate = LocalDate.from(fromDate); assertThat(toDate.toString()).isEqualTo("2016-09-25"); // LocalTimeから取得 LocalTime fromTime = LocalTime.of(12, 55, 10); LocalTime toTime = LocalTime.from(fromTime); assertThat(toTime.toString()).isEqualTo("12:55:10");
parse() 文字列から取得
parse(CharSequence text)
parse(CharSequence text)で文字列からLocalDateTimeを取得。
引数なしの場合、DateTimeFormatter.ISO_LOCAL_DATE_TIMEでパースされる。
// DateTimeFormatter.ISO_LOCAL_DATE_TIME LocalDateTime dateTime = LocalDateTime.parse("2016-09-25T12:55:10"); System.out.println(dateTime);
parse(CharSequence text, DateTimeFormatter formatter)
parse(CharSequence text, DateTimeFormatter formatter)で指定したフォーマッタで文字列からLocalDateTimeを取得。
// DateTimeFormatter.ISO_OFFSET_DATE_TIME LocalDateTime basicIso = LocalDateTime.parse("2016-09-25T12:55:10+09:00", DateTimeFormatter.ISO_OFFSET_DATE_TIME); System.out.println(basicIso);
getXXX() 各フィールドの取得
getYear()
年フィールドを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 12, 55, 10, 123_456_789); // getYear int year = dateTime.getYear(); assertThat(year).isEqualTo(2016);
getDayOfYear()
年の日(1~366)を取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 12, 55, 10, 123_456_789); // getDayOfYear int dayOfYear = dateTime.getDayOfYear(); assertThat(dayOfYear).isEqualTo(269);
getMonth()
月フィールドを列挙型Monthで取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 12, 55, 10, 123_456_789); // getMonth Month month = dateTime.getMonth(); assertThat(month).isEqualTo(Month.SEPTEMBER);
getMonthValue()
月フィールド(1~12)を取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 12, 55, 10, 123_456_789); // getMonthValue int monthValue = dateTime.getMonthValue(); assertThat(monthValue).isEqualTo(9);
getDayOfMonth()
月の日フィールド(1~31)を取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 12, 55, 10, 123_456_789); // getDayOfMonth int dayOfMonth = dateTime.getDayOfMonth(); assertThat(dayOfMonth).isEqualTo(25);
getDayOfWeek()
曜日フィールドを列挙型DayOfWeekで取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 12, 55, 10, 123_456_789); // getDayOfWeek DayOfWeek dayOfWeek = dateTime.getDayOfWeek(); assertThat(dayOfWeek).isEqualTo(DayOfWeek.SUNDAY);
getHour()
時フィールドを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 12, 55, 10, 123_456_789); // getHour int hour = dateTime.getHour(); assertThat(hour).isEqualTo(12);
getMinute()
分フィールドを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 12, 55, 10, 123_456_789); // getMinute int minute = dateTime.getMinute(); assertThat(minute).isEqualTo(55);
getSecond()
秒フィールドを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 12, 55, 10, 123_456_789); // getSecond int second = dateTime.getSecond(); assertThat(second).isEqualTo(10);
getNano()
ナノ秒フィールドを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 12, 55, 10, 123_456_789); // getNano int nano = dateTime.getNano(); assertThat(nano).isEqualTo(123_456_789);
get() フィールドを指定して取得
get(ChronoField.ERA)
紀元を取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 紀元 int era = dateTime.get(ChronoField.ERA); assertThat(era).isEqualTo(1);
get(ChronoField.YEAR)
年(グレゴリオ暦)を取得。
// 年 LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); int year = dateTime.get(ChronoField.YEAR); assertThat(year).isEqualTo(2016);
get(ChronoField.DAY_OF_YEAR)
年の日(1~366)を取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 年の日 int dayOfYear = dateTime.get(ChronoField.DAY_OF_YEAR); assertThat(dayOfYear).isEqualTo(269);
get(ChronoField.MONTH_OF_YEAR)
月を取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 月 int month = dateTime.get(ChronoField.MONTH_OF_YEAR); assertThat(month).isEqualTo(9);
get(ChronoField.DAY_OF_MONTH)
月の日(1~31)を取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 日 int dayOfMonth = dateTime.get(ChronoField.DAY_OF_MONTH); assertThat(dayOfMonth).isEqualTo(25);
get(ChronoField.DAY_OF_WEEK)
曜日を取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 曜日 int dayOfWeek = dateTime.get(ChronoField.DAY_OF_WEEK); assertThat(dayOfWeek).isEqualTo(7);
get(ChronoField.HOUR_OF_DAY)
時(0~23)を取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 時 int hourOfDay = dateTime.get(ChronoField.HOUR_OF_DAY); assertThat(hourOfDay).isEqualTo(20);
get(ChronoField.HOUR_OF_AMPM)
午前または午後の時(0~11)を取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 12時間表示の時間 int hourOfAMPM = dateTime.get(ChronoField.HOUR_OF_AMPM); assertThat(hourOfAMPM).isEqualTo(8);
get(ChronoField.AMPM_OF_DAY)
午前(0)または午後(1)を取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // AMPM int ampmOfDay = dateTime.get(ChronoField.AMPM_OF_DAY); assertThat(ampmOfDay).isEqualTo(1);
get(ChronoField.MINUTE_OF_HOUR)
分(0~59)を取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 分 int minuteOfHour = dateTime.get(ChronoField.MINUTE_OF_HOUR); assertThat(minuteOfHour).isEqualTo(55);
get(ChronoField.MINUTE_OF_DAY)
1日のうちの分(0から(24 * 60) - 1)を取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 一日のうちの分 int minuteOfDay = dateTime.get(ChronoField.MINUTE_OF_DAY); assertThat(minuteOfDay).isEqualTo(1255);
get(ChronoField.SECOND_OF_MINUTE)
秒(0~59)を取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 秒 int secondOfMinute = dateTime.get(ChronoField.SECOND_OF_MINUTE); assertThat(secondOfMinute).isEqualTo(10);
get(ChronoField.MILLI_OF_SECOND)
1秒のうちのミリ秒を取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // ミリ秒 int milliOfSecond = dateTime.get(ChronoField.MILLI_OF_SECOND); assertThat(milliOfSecond).isEqualTo(123);
get(ChronoField.MICRO_OF_SECOND)
1秒のうちのマイクロ秒を取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // マイクロ秒 int microOfSecond = dateTime.get(ChronoField.MICRO_OF_SECOND); assertThat(microOfSecond).isEqualTo(123_456);
get(ChronoField.NANO_OF_SECOND)
1秒のうちのナノ秒を取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // ナノ秒 long nanoOfSecond = dateTime.getLong(ChronoField.NANO_OF_SECOND); assertThat(nanoOfSecond).isEqualTo(123_456_789);
withXXX() フィールドの値を変更して取得
withYear()
年を変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // withYear LocalDateTime dateTimeWithYear = dateTime.withYear(2015); assertThat(dateTimeWithYear.getYear()).isEqualTo(2015);
withMonth()
月を変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // withMonth LocalDateTime dateTimeWithMonth = dateTime.withMonth(3); assertThat(dateTimeWithMonth.getMonth()).isEqualTo(Month.MARCH); assertThat(dateTimeWithMonth.getMonthValue()).isEqualTo(3);
withDayOfMonth()
月の日(1~31)を変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // withDayOfMonth LocalDateTime dateTimeWithDayOfMonth = dateTime.withDayOfMonth(22); assertThat(dateTimeWithDayOfMonth.getDayOfMonth()).isEqualTo(22);
withDayOfYear()
年の日(1~366)を変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // withDayOfYear LocalDateTime dateTimeWithDayOfYear = dateTime.withDayOfYear(222); assertThat(dateTimeWithDayOfYear.getDayOfYear()).isEqualTo(222);
withHour()
時(0~23)を変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // withHour LocalDateTime dateTimeWithHour = dateTime.withHour(23); assertThat(dateTimeWithHour.getHour()).isEqualTo(23);
withMinute()
分(0~59)を変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // withMinute LocalDateTime dateTimeWithMinute = dateTime.withMinute(44); assertThat(dateTimeWithMinute.getMinute()).isEqualTo(44);
withSeconde()
秒(0~59)を変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // withSeconde LocalDateTime dateTimeWithSecond = dateTime.withSecond(55); assertThat(dateTimeWithSecond.getSecond()).isEqualTo(55);
withNano()
ナノ秒を変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // withNano LocalDateTime dateTimeWithNano = dateTime.withNano(987_654_321); assertThat(dateTimeWithNano.getNano()).isEqualTo(987_654_321);
with() フィールドを指定して値を変更
with(ChronoField.ERA, long newValue)
紀元を指定した値で変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 紀元 LocalDateTime era = dateTime.with(ChronoField.ERA, 1); assertThat(era.get(ChronoField.ERA)).isEqualTo(1);
with(ChronoField.YEAR, long newValue)
年(グレゴリオ暦)を指定した値で変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 年 LocalDateTime year = dateTime.with(ChronoField.YEAR, 2015); assertThat(year.getYear()).isEqualTo(2015);
with(ChronoField.DAY_OF_YEAR, long newValue)
年の日(1~366)を指定した値で変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 年の日 LocalDateTime dayOfYear = dateTime.with(ChronoField.DAY_OF_YEAR, 250); assertThat(dayOfYear.getDayOfYear()).isEqualTo(250);
with(ChronoField.MONTH_OF_YEAR, long newValue)
月を指定した値で変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 月 LocalDateTime monthOfYear = dateTime.with(ChronoField.MONTH_OF_YEAR, 8); assertThat(monthOfYear.getMonth()).isEqualTo(Month.AUGUST);
with(ChronoField.DAY_OF_MONTH, long newValue)
月の日(1~31)を指定した値で変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 日 LocalDateTime dayOfMonth = dateTime.with(ChronoField.DAY_OF_MONTH, 22); assertThat(dayOfMonth.getDayOfMonth()).isEqualTo(22);
with(ChronoField.DAY_OF_WEEK, long newValue)
曜日を指定した値で変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 曜日 LocalDateTime dayOfWeek = dateTime.with(ChronoField.DAY_OF_WEEK, 6); assertThat(dayOfWeek.getDayOfWeek()).isEqualTo(DayOfWeek.SATURDAY);
with(ChronoField.HOUR_OF_DAY, long newValue)
時(0~23)を指定した値で変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 時 LocalDateTime hourOfDay = dateTime.with(ChronoField.HOUR_OF_DAY, 23); assertThat(hourOfDay.getHour()).isEqualTo(23);
with(ChronoField.HOUR_OF_AMPM, long newValue)
午前または午後の時(0~11)を指定した値で変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 12時間表示の時間 LocalDateTime hourOfAMPM = dateTime.with(ChronoField.HOUR_OF_AMPM, 8); assertThat(hourOfAMPM.get(ChronoField.HOUR_OF_AMPM)).isEqualTo(8);
with(ChronoField.AMPM_OF_DAY, long newValue)
午前(0)または午後(1)を指定した値で変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // AMPM LocalDateTime ampmOfDay = dateTime.with(ChronoField.AMPM_OF_DAY, 0); assertThat(ampmOfDay.get(ChronoField.AMPM_OF_DAY)).isEqualTo(0);
with(ChronoField.MINUTE_OF_HOUR, long newValue)
分(0~59)を指定した値で変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 分 LocalDateTime minuteOfHour = dateTime.with(ChronoField.MINUTE_OF_HOUR, 44); assertThat(minuteOfHour.getMinute()).isEqualTo(44);
with(ChronoField.MINUTE_OF_DAY, long newValue)
1日のうちの分(0から(24 * 60) - 1)を指定した値で変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 一日のうちの分 LocalDateTime minuteOfDay = dateTime.with(ChronoField.MINUTE_OF_DAY, 1200); assertThat(minuteOfDay.get(ChronoField.MINUTE_OF_DAY)).isEqualTo(1200);
with(ChronoField.SECOND_OF_MINUTE, long newValue)
秒(0~59)を指定した値で変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 秒 LocalDateTime secondOfMinute = dateTime.with(ChronoField.SECOND_OF_MINUTE, 33); assertThat(secondOfMinute.getSecond()).isEqualTo(33);
with(ChronoField.MILLI_OF_SECOND, long newValue)
1秒のうちのミリ秒を指定した値で変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // ミリ秒 LocalDateTime milliOfSecond = dateTime.with(ChronoField.MILLI_OF_SECOND, 234); assertThat(milliOfSecond.get(ChronoField.MILLI_OF_SECOND)).isEqualTo(234);
with(ChronoField.MICRO_OF_SECOND, long newValue)
1秒のうちのマイクロ秒を指定した値で変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // マイクロ秒 LocalDateTime microOfSecond = dateTime.with(ChronoField.MICRO_OF_SECOND, 234_567); assertThat(microOfSecond.get(ChronoField.MICRO_OF_SECOND)).isEqualTo(234_567);
with(ChronoField.NANO_OF_SECOND, long newValue)
1秒のうちのナノ秒を指定した値で変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // ナノ秒 LocalDateTime nanoOfSecond = dateTime.with(ChronoField.NANO_OF_SECOND, 987_654_321); assertThat(nanoOfSecond.getNano()).isEqualTo(987_654_321);
with(adjuster) アジャスタを指定して取得
with(LocalDate)
指定したLocalDateの年月日で変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // LocalDate LocalDate date = LocalDate.of(2015, 12, 23); LocalDateTime dateTimeWithLocalDate = dateTime.with(date); assertThat(dateTimeWithLocalDate.toString()).isEqualTo("2015-12-23T20:55:10.123456789");
with(LocalTime)
指定したLocalTimeの時分秒で変更してLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // LocalTime LocalTime time = LocalTime.of(21, 43, 25); LocalDateTime dateTimeWithLocalTime = dateTime.with(time); assertThat(dateTimeWithLocalTime.toString()).isEqualTo("2016-09-25T21:43:25");
with(TemporalAdjusters.dayOfWeekInMonth())
月の第N曜日のLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 月の第N曜日 // 例)9月の第3金曜日 LocalDateTime dayOfWeekInMonth = dateTime.with(TemporalAdjusters.dayOfWeekInMonth(3, DayOfWeek.FRIDAY)); assertThat(dayOfWeekInMonth.getDayOfMonth()).isEqualTo(16);
with(TemporalAdjusters.firstDayOfMonth())
月初日のLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 月初日 // 例)2016年9月の最初の日 LocalDateTime firstDayOfMonth = dateTime.with(TemporalAdjusters.firstDayOfMonth()); assertThat(firstDayOfMonth.getDayOfMonth()).isEqualTo(1);
with(TemporalAdjusters.firstDayOfNextMonth())
翌月の最初の日のLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 翌月の最初の日 // 例)2016年10月の最初の日 LocalDateTime firstDayOfNextMonth = dateTime.with(TemporalAdjusters.firstDayOfNextMonth()); assertThat(firstDayOfNextMonth.getDayOfMonth()).isEqualTo(1);
with(TemporalAdjusters.firstDayOfNextYear())
翌年の最初の日のLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 翌年の最初の日 // 例)2017年の最初の日 LocalDateTime firstDayOfYear = dateTime.with(TemporalAdjusters.firstDayOfNextYear()); assertThat(firstDayOfYear.getDayOfMonth()).isEqualTo(1);
with(TemporalAdjusters.firstInMonth())
月の中で指定した曜日の一番早い日のLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 月の中で指定した曜日の一番早い日 // 例)2016年9月で最初の金曜日 LocalDateTime firstInMonth = dateTime.with(TemporalAdjusters.firstInMonth(DayOfWeek.FRIDAY)); assertThat(firstInMonth.getDayOfMonth()).isEqualTo(2);
with(TemporalAdjusters.lastDayOfMonth())
月末日のLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 月末日 // 例)2016年9月の最後の日 LocalDateTime lastDayOfMonth = dateTime.with(TemporalAdjusters.lastDayOfMonth()); assertThat(lastDayOfMonth.getDayOfMonth()).isEqualTo(30);
with(TemporalAdjusters.lastDayOfYear())
年末日のLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 年末日 // 例)2016年の最後の日 LocalDateTime lastDayOfYear = dateTime.with(TemporalAdjusters.lastDayOfYear()); assertThat(lastDayOfYear.getDayOfMonth()).isEqualTo(31);
with(TemporalAdjusters.lastInMonth())
月の中で指定した曜日の一番遅い日のLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 月の中で指定した曜日の一番遅い日 // 例)2016年9月で最後の金曜日 LocalDateTime lastInMonth = dateTime.with(TemporalAdjusters.lastInMonth(DayOfWeek.FRIDAY)); assertThat(lastInMonth.getDayOfMonth()).isEqualTo(30);
with(TemporalAdjusters.next())
指定した曜日が次に出てくる最初の日のLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 指定した曜日が次に出てくる最初の日 // 例)2016年9月25日以降で一番最初の土曜日 LocalDateTime next = dateTime.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)); assertThat(next.getDayOfMonth()).isEqualTo(2);
with(TemporalAdjusters.nextOrSame())
指定した曜日が次に出てくる最初の日(ただし同じ曜日の場合、その日を返す)のLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 指定した曜日が次に出てくる最初の日(ただし同じ曜日の場合、その日を返す) // 例)2016年9月25日以降で一番最初の土曜日 LocalDateTime nextOrSame = dateTime.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)); assertThat(nextOrSame.getDayOfMonth()).isEqualTo(25);
with(TemporalAdjusters.previous())
指定した曜日が前に出てくる最初の日のLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 指定した曜日が前に出てくる最初の日 // 例)2016年9月25日以前で一番最初の金曜日 LocalDateTime previous = dateTime.with(TemporalAdjusters.previous(DayOfWeek.SUNDAY)); assertThat(previous.getDayOfMonth()).isEqualTo(18);
with(TemporalAdjusters.previousOrSame())
指定した曜日が前に出てくる最初の日(ただし同じ曜日の場合、その日を返す)のLocalDateTimeを取得。
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 指定した曜日が前に出てくる最初の日(ただし同じ曜日の場合、その日を返す) // 例)2016年9月25日以前で一番最初の金曜日 LocalDateTime previousOrSame = dateTime.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY)); assertThat(previousOrSame.getDayOfMonth()).isEqualTo(25);
plus() 加算
加算は指定したフィールドを加算するplus()メソッドと、各フィールドごとのplusXXX()メソッドがあります。
plusYears()
年の加算
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 年の加算 LocalDateTime plusYears = dateTime.plusYears(1L); assertThat(plusYears.getYear()).isEqualTo(2017); LocalDateTime plusYears2 = dateTime.plus(1L, ChronoUnit.YEARS); assertThat(plusYears2.getYear()).isEqualTo(2017);
plusMonths()
月の加算
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 月の加算 LocalDateTime plusMonths = dateTime.plusMonths(1L); assertThat(plusMonths.getMonth()).isEqualTo(Month.OCTOBER); LocalDateTime plusMonths2 = dateTime.plus(1L, ChronoUnit.MONTHS); assertThat(plusMonths2.getMonth()).isEqualTo(Month.OCTOBER);
plusWeeks()
週の加算
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 週の加算 LocalDateTime plusWeeks = dateTime.plusWeeks(1L); assertThat(plusWeeks.getDayOfMonth()).isEqualTo(2); LocalDateTime plusWeeks2 = dateTime.plus(1L, ChronoUnit.WEEKS); assertThat(plusWeeks2.getDayOfMonth()).isEqualTo(2);
plusDays()
日の加算
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 日の加算 LocalDateTime plusDays = dateTime.plusDays(1L); assertThat(plusDays.getDayOfMonth()).isEqualTo(26); LocalDateTime plusDays2 = dateTime.plus(1L, ChronoUnit.DAYS); assertThat(plusDays2.getDayOfMonth()).isEqualTo(26);
plusHours()
時の加算
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 時の加算 LocalDateTime plusHours = dateTime.plusHours(1L); assertThat(plusHours.getHour()).isEqualTo(21); LocalDateTime plusHours2 = dateTime.plus(1L, ChronoUnit.HOURS); assertThat(plusHours2.getHour()).isEqualTo(21);
plusMinutes()
分の加算
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 分の加算 LocalDateTime plusMinutes = dateTime.plusMinutes(1L); assertThat(plusMinutes.getMinute()).isEqualTo(56); LocalDateTime plusMinutes2 = dateTime.plus(1L, ChronoUnit.MINUTES); assertThat(plusMinutes2.getMinute()).isEqualTo(56);
plusSeconds()
秒の加算
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 秒の加算 LocalDateTime plusSeconds = dateTime.plusSeconds(1L); assertThat(plusSeconds.getSecond()).isEqualTo(11); LocalDateTime plusSeconds2 = dateTime.plus(1L, ChronoUnit.SECONDS); assertThat(plusSeconds2.getSecond()).isEqualTo(11);
plusNanos()
ナノ秒の加算
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // ナノ秒の加算 LocalDateTime plusNanos = dateTime.plusNanos(1L); assertThat(plusNanos.getNano()).isEqualTo(123456790); LocalDateTime plusNanos2 = dateTime.plus(1L, ChronoUnit.NANOS); assertThat(plusNanos2.getNano()).isEqualTo(123456790);
minus() 減算
加算は指定したフィールドを加算するminus()メソッドと、各フィールドごとのminusXXX()メソッドがあります。
minusYears()
年の減算
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 年の減算 LocalDateTime minusYears = dateTime.minusYears(1L); assertThat(minusYears.getYear()).isEqualTo(2015); LocalDateTime minusYears2 = dateTime.minus(1L, ChronoUnit.YEARS); assertThat(minusYears2.getYear()).isEqualTo(2015);
minusMonths()
月の減算
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 月の減算 LocalDateTime minusMonths = dateTime.minusMonths(1L); assertThat(minusMonths.getMonth()).isEqualTo(Month.AUGUST); LocalDateTime minusMonths2 = dateTime.minus(1L, ChronoUnit.MONTHS); assertThat(minusMonths2.getMonth()).isEqualTo(Month.AUGUST);
minusWeeks()
週の減算
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 週の減算 LocalDateTime minusWeeks = dateTime.minusWeeks(1L); assertThat(minusWeeks.getDayOfMonth()).isEqualTo(18); LocalDateTime minusWeeks2 = dateTime.minus(1L, ChronoUnit.WEEKS); assertThat(minusWeeks2.getDayOfMonth()).isEqualTo(18);
minusDays()
日の減算
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 日の減算 LocalDateTime minusDays = dateTime.minusDays(1L); assertThat(minusDays.getDayOfMonth()).isEqualTo(24); LocalDateTime minusDays2 = dateTime.minus(1L, ChronoUnit.DAYS); assertThat(minusDays2.getDayOfMonth()).isEqualTo(24);
minusHours()
時の減算
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 時の減算 LocalDateTime minusHours = dateTime.minusHours(1L); assertThat(minusHours.getHour()).isEqualTo(19); LocalDateTime minusHours2 = dateTime.minus(1L, ChronoUnit.HOURS); assertThat(minusHours2.getHour()).isEqualTo(19);
minusMinutes()
分の減算
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 分の減算 LocalDateTime minusMinutes = dateTime.minusMinutes(1L); assertThat(minusMinutes.getMinute()).isEqualTo(54); LocalDateTime minusMinutes2 = dateTime.minus(1L, ChronoUnit.MINUTES); assertThat(minusMinutes2.getMinute()).isEqualTo(54);
minusSeconds()
秒の減算
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // 秒の減算 LocalDateTime minusSeconds = dateTime.minusSeconds(1L); assertThat(minusSeconds.getSecond()).isEqualTo(9); LocalDateTime minusSeconds2 = dateTime.minus(1L, ChronoUnit.SECONDS); assertThat(minusSeconds2.getSecond()).isEqualTo(9);
minusNanos()
ナノ秒の減算
LocalDateTime dateTime = LocalDateTime.of(2016, 9, 25, 20, 55, 10, 123_456_789); // ナノ秒の減算 LocalDateTime minusNanos = dateTime.minusNanos(1L); assertThat(minusNanos.getNano()).isEqualTo(123456788); LocalDateTime minusNanos2 = dateTime.minus(1L, ChronoUnit.NANOS); assertThat(minusNanos2.getNano()).isEqualTo(123456788);
isAfter(), isBefore(), isEqual() 比較
isAfter()
指定した日時より後の場合、true。
// isAfter LocalDateTime dateTime1 = LocalDateTime.of(2016, 9, 25, 20, 55, 10); LocalDateTime dateTime2 = LocalDateTime.of(2016, 9, 25, 20, 55, 11); assertThat(dateTime2.isAfter(dateTime1)).isEqualTo(true);
isBefore()
指定した日時より前の場合、true。
// isBefore LocalDateTime dateTime1 = LocalDateTime.of(2016, 9, 25, 20, 55, 10); LocalDateTime dateTime2 = LocalDateTime.of(2016, 9, 25, 20, 55, 11); assertThat(dateTime1.isBefore(dateTime2)).isEqualTo(true);
isEqual()
指定した日時と等しい場合、true。
// isEqual LocalDateTime dateTime1 = LocalDateTime.of(2016, 9, 25, 20, 55, 10); LocalDateTime dateTime3 = dateTime1.plusSeconds(1L); assertThat(dateTime2.isEqual(dateTime3)).isEqualTo(true);
終わり。
ソースコードはあげときました。