今までのおさらい
新しく追加されたTime APIを使用してみる
新しく追加されたAPI
クラス | 年 | 月 | 日 | 時間 | ゾーン | 用途 |
---|---|---|---|---|---|---|
ZonedDateTime | ○ | ○ | ○ | ○ | ○ | 厳密な日時情報 |
LocalDateTime | ○ | ○ | ○ | ○ | X | 日常使う日時情報 |
LocalDate | ○ | ○ | ○ | X | X | 誕生日 |
LocalTime | X | X | X | ○ | X | アラーム時刻など |
Year | ○ | X | X | X | X | 著作発表年など |
YearMonth | ○ | ○ | X | X | X | カード有効期限など |
Month | X | ○ | X | X | X | 決算月など |
MonthDay | X | ○ | ○ | X | X | 日本の祝日など |
このうちLocalDateを使って10日後を計算してみました
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
// Java8から追加されたTime APIを使用
// 10日後の日付を取得する
public class TenDaysCalendarNewAPI {
public static void main(String[] args) {
LocalDate now = LocalDate.now();
LocalDate future = now.plusDays(10);
// フォーマットを指定せずに表示
System.out.println("■ LocalDate型をそのまま表示");
System.out.println(now);
System.out.println(future);
System.out.println();
// フォーマットを指定して表示
System.out.println("■ DateTimeFormatterを使って表示");
DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
System.out.println(now.format(f));
System.out.println(future.format(f));
System.out.println();
System.out.println("■ SimpleDateFormatを使って表示");
SimpleDateFormat f2 = new SimpleDateFormat("yyyy年MM月dd日");
System.out.println(f.format(now));
System.out.println(f.format(future));
}
}
実行結果
■ LocalDate型をそのまま表示
2020-10-12
2020-10-22
■ DateTimeFormatterを使って表示
2020年10月12日
2020年10月22日
■ SimpleDateFormatを使って表示
2020年10月12日
2020年10月22日
新しいAPIの方が扱いやすいですね
自分の直感的には扱いやすいと感じました。それはformat指定の際にですね、
SimpleDateFormatは、SimpleDateFormatに日付情報を渡す
DateTimeFormatterは、日付情報にDateTimeFormatterの形式を指定する
という部分ですね。
何を入っているかわからんくなってきますが、
自分的には
System.out.println(f.format(now));
という部分がわかりにくいというか、そういうやり方なんでしかたないですが、なんとなく釈然としない感じがありました。
System.out.println(now.format(f));
のように、nowの日付情報をformatメソッドの引数に渡した形式の情報に変換する
というようなイメージの方がわかりやすいということでした!