Java8 Date and Time API (LocalDateTime)

Java8 Date and Time APIのLocalDateTimeメモです。

Java8で追加となったData and Time APIのLocalDateTimeを触ってみました。
Javaの使いにくかったDateクラスやCalendarクラスに代わり、
Joda Timeを元に開発されました。

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);

終わり。

ソースコードはあげときました。

github.com