バナー画像

JavaのDate型とは?

この記事では、Javaの「Date型」について解説します。

Date型とは、日時を扱うデータ型のことです。

Dateクラスが用意されており、日付を表示・取得・計算するときに使えます。

日付のデータをミリ秒まで表示できますが、「時間・分・秒」の取得や設定するメソッドの使用は推奨されていません。

では、実際にDate型を使ってみましょう!

次のように記述します。

■記述例
import java.text.SimpleDateFormat;
import java.util.Date;

public class Main{
  public static void main(String[] args){
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy'/'MM'/'dd'/('E')'k':'mm':'ss");
    System.out.println(sdf.format(date));
  }
}
import java.text.SimpleDateFormat;
import java.util.Date;

「import java.text.SimpleDateFormat」で、Dateクラスが保持している日付の情報を、指定する書式の文字列に変換できます

そして、「import java.util.Date;」でDateクラスを使えるようにしましょう!

Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy'/'MM'/'dd'/('E')'k':'mm':'ss");
System.out.println(sdf.format(date));

「Date date = new Date();」で、Date型の変数「date」を作成しています。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy'/'MM'/'dd'/('E')'k':'mm':'ss");

上記の部分で、Date型のデータを文字列として表示させるように処理しています。

そして最後に、formatメソッドでdate変数を整形して、出力しています!

実行結果は、次の通りです。

■実行結果
mbp:Desktop potepan$ java Main
2020/12/28/(月)13:21:41

実際の日付は、実行している日時によって変わるはずです!

このように、Date型で日時を取得・表示できます。

Date型で扱える範囲は?

Date型でどこまでの範囲を扱えるの?

こんな風に思う人もいるのではないでしょうか?

実際に、扱える範囲を確認してみると、かなり広い範囲の日時を扱えます。

実行結果は、次の通りです。

■記述例
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

public class Main{
  public static void main(String[] args){
    SimpleDateFormat sdf = new SimpleDateFormat("GGGyyyy年MMM月dd日 HH時mm分ss.S秒");
    sdf.setTimeZone(TimeZone.getTimeZone("GMT"));

    Date min = new Date(Long.MIN_VALUE);
    Date max = new Date(Long.MAX_VALUE);

    System.out.println("Date型の最小値 = " + sdf.format(min));
    System.out.println("Date型の最大値 = " + sdf.format(max));
  }
}
■実行結果
mbp:Desktop potepan$ java Main
Date型の最小値 = 紀元前292269055年12月月02日 16時47分04.192秒
Date型の最大値 = 西暦292278994年8月月17日 07時12分55.807秒

このように、最小値は紀元前から、最大値は292278994年までと、十分な範囲で日時を扱っているのです。

Date型の範囲を扱って、日時を比較する方法は次の章で解説します!

Date型を比較する

ここでは、Date型の比較について解説します。

現在の日付と過去・未来の日付を比較する方法に、「beforeメソッド」「afterメソッド」があります。

どちらも、Dateクラスのメソッドです。

記述例は次のようになります。

■記述例
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Calendar;

public class Main{
  public static void main(String[] args){
    Date date = new Date();
    Calendar cBefore = Calendar.getInstance();
    Calendar cAfter = Calendar.getInstance();

    cBefore.set(2020, 11 - 1, 1, 0, 0, 0); // Calendarクラスの month は、実際の月の-1で表されるため調整
    cAfter.set(2020, 12 - 1, 31, 23, 59, 59);

    Date dateBefore = cBefore.getTime();
    Date dateAfter = cAfter.getTime();

    System.out.println("今日は2020/11/1よりも前: " + date.before(dateBefore));
    System.out.println("今日は2020/11/1よりも後: " + date.after(dateBefore));
    System.out.println("今日は2020/12/31よりも前: " + date.before(dateAfter));
    System.out.println("今日は2020/12/31よりも後: " + date.after(dateAfter));
  }
}

過去・未来の日付を設定するためにCalendarクラスを使用しています。

それぞれ、任意の日時を設定しましょう。

月(month)を設定する際、Calendarクラスだと「実際の月の-1」で表現されるため、-1をして調整しています。

そして、「date.before(dateBefore)」の部分で、date(現在の日時)と過去(dateBefore)をbeforeメソッドで比較しました。

合致していればtrue、そうでなければfalseが返ります。

実行結果は次の通りです。

■実行結果
mbp:Desktop potepan$ java Main
今日は2020/11/1よりも前: false
今日は2020/11/1よりも後: true
今日は2020/12/31よりも前: true
今日は2020/12/31よりも後: false

意図した結果が取得できています!

なお、Calendarクラスについては、以下の記事で詳しく解説しています!

【関連記事】

▶︎【Java入門】日付情報を取得出来るCalendarクラスを理解しよう!

Date型を変換する

この章では、Date型をさまざまな型に変換する方法を見ていきましょう!

Date型と文字列の変換

Date型を文字列に変換するには、冒頭で紹介した記述例のように「SimpleDateFormat」を使います。

■記述例
import java.text.SimpleDateFormat;
import java.util.Date;

public class Main{
  public static void main(String[] args){
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy'/'MM'/'dd'/('E')'k':'mm':'ss");

    System.out.println(date);
    System.out.println(sdf.format(date));
  }
}
■実行結果
mbp:Desktop potepan$ java Main
Mon Dec 28 16:55:27 JST 2020
2020/12/28/(月)16:55:27

文字列に変換していない場合と比較してみるとわかりやすいですよね。

このように、任意の形式で日時を表示できます。

表示形式は変更できませんが、「toString()メソッド」を使うことでも、文字列に変換可能です。

■記述例
import java.text.SimpleDateFormat;
import java.util.Date;

public class Main{
  public static void main(String[] args){
    Date date = new Date();
    String s = date.toString();
    System.out.println(date);
    System.out.println(s);
  }
}
■実行結果
mbp:Desktop potepan$ java Main
Mon Dec 28 16:57:26 JST 2020
Mon Dec 28 16:57:26 JST 2020

表示としてはData型と同じですが、文字列に変換できました。

 

一方、文字列をDate型にしたい場合は、「parseメソッド」が使えます。

parseメソッドは、SimpleDateFormatクラスで実装されており、文字列をDateクラスの値として返します

また、ParseExceptionをthrowするメソッドでもあるため、次のように記述して使いましょう。

■記述例
import java.text.SimpleDateFormat;
import java.util.Date;
import java.text.ParseException;

public class Main{
  public static void main(String[] args){
    try {
      String s = "2020/12/28(月)16:59:38";
      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd(E)k:mm:ss");
      Date date = dateFormat.parse(s);
      System.out.println(date);
    } catch (ParseException e) {
      e.printStackTrace();
    }
  }
}
■実行結果
mbp:Desktop potepan$ java Main
Mon Dec 28 16:59:38 JST 2020

実行結果を見てわかるように、文字列で指定した情報がDate型に変換できています!

また、valueOfメソッドを用いても変換可能です。

文字列で表した日付を、SQLのDate型である「yyyy-mm-dd」で記述します。

記述例は次の通りです。

■記述例
import java.text.SimpleDateFormat;
import java.util.Date;

public class Main{
  public static void main(String[] args){
    String s = "2020-12-28";
    Date date = java.sql.Date.valueOf(s);
    System.out.println(date);
  }
}

■実行結果
mbp:Desktop potepan$ java Main
2020-12-28

Date型とCalendar型の変換

Date型からCalendar型に変換する記述例は、次の通りです。

■記述例
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Calendar;

public class Main{
  public static void main(String[] args){
    Date date = new Date();
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    System.out.println(c.getTime().toString());
  }
}
■実行結果
mbp:Desktop potepan$ java Main
Mon Dec 28 17:18:22 JST 2020

一方、Calendar型からDate型に変換する記述例は、次の通りです。

■記述例
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Calendar;

public class Main{
  public static void main(String[] args){
    Calendar c = Calendar.getInstance();
    c.set(Calendar.YEAR, 2020);
    c.set(Calendar.MONTH, 12 - 1); // Calendarクラスの month は、実際の月の-1で表されるため調整
    c.set(Calendar.DAY_OF_MONTH, 28);
    Date date = c.getTime();
    System.out.println(date);
  }
}

■実行結果
mbp:Desktop potepan$ java Main
Mon Dec 28 17:21:16 JST 2020

「getTime()」を使用しているため、時間まで取得できています。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。