Javaの日付(Date、LocalDateTime)


Javaの日付型はJava 7まではDate/Calendar/DateFormat等のクラスが使われてきたが、Java 8からは新しくLocalDateTime/ZonedDateTimeなどを使うことが推奨されています。

🎳 Dateクラス

まず、Java 7までメインで使われてきたDateを簡単に紹介します。

日付に関するクラス

Java 7までで使われていた日付に関するクラスを紹介します。

クラス 説明
Date 日付を扱うクラス
Calendar 日付の操作、計算などを扱うクラス
SimpleDateFormat 日付書式を扱うクラス

サンプルコード

Dateを使ったサンプルコードの紹介です。

import java.util.Date;

public class SampleDate {
public static void main(String args[]){
//Dateオブジェクトを生成
Date date1 = new Date();

// date1 をコピー
Date date2 = (Date) dt.clone();

//Dateの設定内容を出力
System.out.println("date1を表示 : " + date1.toString());
System.out.println("date2を表示 : " + date2.toString());

//指定された日付の前後を比較
boolean result;
result = date2.after(date1);
System.out.println("date2はdate1より後の日時か否か:" + result);

result = date2.before(date1);
System.out.println("date2はdate1より前の日時か否か:" + result);

result = date2.equals(date1);
System.out.println("date2はdate1と同じ日時か否か:" + result);

//日付の比較
int compareResult = date1.compareTo(date2);
System.out.println("date1とdate2の比較 : " + compareResult);
}
}

🐞 Java 8からのTime APIについて

Java 8で追加されたTime APIによって、データ保持と日付操作(年/月/日フィールドの取得/変更など)が1クラスでできるようになりました。時間はナノ秒まで格納できます。

日時に関するクラス

java.timeに追加されたクラスをいくつか紹介します。

クラス 説明
LocalDateTime タイムゾーンのない日時。内部にLocalDateLocalTimeをもつ
ZonedDateTime タイムゾーン付きの日時
OffsetDateTime オフセット付きの日付
DateTimeFormatter 日付・時刻の文字列出力や解析を行います
Instant エポック秒を表すlong値と1秒未満のナノ秒を表すint値をもつ。Dateと相互変換できる

サンプルコード

import java.util.Time;

public class SampleDate {
public static void main(String args[]){
//現在時刻の取得 - now
LocalDateTime dt1 = LocalDateTime.now();

// 年月日時分秒を指定してインスタンスを作成
LocalDateTime dt2 = LocalDateTime.of(2017, 5, 23, 20, 25, 00);

// 年月日時分秒などのフィールドの取得
System.out.println(dt2.getYear()); //=> 2017
System.out.println(dt2.getMonth()); //=> 5
System.out.println(dt2.getDayOfMonth()); //=> 23
System.out.println(dt2.getHour()); //=> 20
System.out.println(dt2.getMinute()); //=> 25
System.out.println(dt2.getSecond()); //=> 0
System.out.println(dt2.getNano()); //=> 000
System.out.println(dt2.get(ChronoField.YEAR));

// 来月1日の14時
LocalDateTime d = LocalDateTime.now()
.plusMonths(1)
.withDayOfMonth(1)
.withHour(14)
.truncatedTo(ChronoUnit.HOURS);

// 文字列への置換
DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
System.out.println(dt2.format(f)); // 2017/05/23 20:25:00
}
}

🎉 参考リンク

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍