Java 8 – TemporalAdjustersの例
Java 8では、あらかじめ定義された `java.time.temporal.TemporalAdjusters`を使用して日付を調整したり、https://docs.oracle.com/javase/8/docs/api/java/time/temporal/Temporal.htmlを調整することができます[時代]
1.時間的調節器
firstDayOfMonth、firstDayOfNextMonth、次の月曜日などに日付を移動する例
TestDate.java
package com.mkyong.time;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
public class TestDate {
public static void main(String[]args) {
LocalDate localDate = LocalDate.now();
System.out.println("current date : " + localDate);
LocalDate with = localDate.with(TemporalAdjusters.firstDayOfMonth());
System.out.println("firstDayOfMonth : " + with);
LocalDate with1 = localDate.with(TemporalAdjusters.lastDayOfMonth());
System.out.println("lastDayOfMonth : " + with1);
LocalDate with2 = localDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
System.out.println("next monday : " + with2);
LocalDate with3 = localDate.with(TemporalAdjusters.firstDayOfNextMonth());
System.out.println("firstDayOfNextMonth : " + with3);
}
}
出力
current date : 2016-11-15 firstDayOfMonth : 2016-11-01 lastDayOfMonth : 2016-11-30 next monday : 2016-11-21 firstDayOfNextMonth : 2016-12-01
2.カスタムTemporalAdjuster
次のクリスマスに日付を移動するための `TemporalAdjuster`を実装する例
NextChristmas.java
package com.mkyong.time;
import java.time.temporal.ChronoField;
import java.time.temporal.Temporal;
import java.time.temporal.TemporalAdjuster;
public class NextChristmas implements TemporalAdjuster {
@Override
public Temporal adjustInto(Temporal temporal) {
return temporal.with(ChronoField.MONTH__OF__YEAR, 12).with(ChronoField.DAY__OF__MONTH, 25);
}
}
TestDate.java
package com.mkyong.time;
import java.time.LocalDate;
public class TestDate {
public static void main(String[]args) {
LocalDate localDate = LocalDate.now();
System.out.println("current date : " + localDate);
localDate = localDate.with(new NextChristmas());
System.out.println("Next Christmas : " + localDate);
}
}
出力
current date : 2016-11-15 Next Christmas : 2016-12-25
または、次のラムダ式を使用することもできます。
localDate = localDate.with(
temporal -> temporal.with(ChronoField.MONTH__OF__YEAR, 12).with(ChronoField.DAY__OF__MONTH, 25)
);
参考文献
-
リンク://java8/java-8-hijrahdate-how-to-calculate-the-ramadan-date/[Java
8 – HijrahDate、ラマダン日付の計算方法]。
https://docs/
JavaDoc]。
https://docs.oracle.com/javase/8/docs/api/java/time/temporal/TemporalAdjusters.html
[TemporalAdjusters
JavaDoc]。
https://docs.oracle.com/javase/8/docs/api/java/time/temporal/Temporal.html
[Temporal
JavaDoc]。
Wikipediaクリスマス
リンク://タグ/日付/[日付]リンク://タグ/java-time/[java.time]リンク://タグ/java8/[java8]
TemporalAdjusters