LoginSignup
69
75

More than 5 years have passed since last update.

Javaの日付データ型変換(Date, Calendar, String)

Posted at

Javaで日付のデータを扱う時に、よく混乱したので自分なりに整理してみました。

日付に関するデータ型

Date

  • 特定の日付のデータをミリ秒まで表すことができる
  • しかし、時間・分・秒の取得や設定をするメソッドは推奨されていない
    • 後述のCalendarクラスで時間・分・秒まで扱える

Calendar

  • 日付と時間のフォーマットを行う時に必要な全ての時間フォーマット値を生成できる
  • 任意の日時を成形する時などに使える

java.util.Date

  • java.utilはDate型を扱えるパッケージの一つ
  • 日付データの比較や取得に関するメソッドが継承されている
    • equals:2つの日付が等しいかどうか比較
    • getDay:日のデータを取得できる(0 = Sunday, 1 = Monday,...)
    • などなど

java.sql.Date

  • java.sqlはパッケージ
  • データソース(通常はRDB)に格納されたデータにアクセスして処理するためのAPIを提供するとのこと
  • java.sql.Dateで日付を扱う場合、時間・分・秒・ミリ秒を0にする必要がある

日付⇄文字列の変換

Date→String

  • SimpleDateFormatで出力したい日付のフォーマットを指定する
  • format(Date date)メソッドで文字列に変換
Date date = new Date(); // 今日の日付
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String strDate = dateFormat.format(date);

System.out.println(date); // => Mon Dec 31 10:33:59 JST 2018
System.out.println(strDate); // => 2018-12-31
  • toString()メソッドを使うと、そのまま文字列になる
Date date = new Date(); // 今日の日付
String strDate = date.toString();

System.out.println(date); // => Mon Dec 31 10:33:59 JST 2018
System.out.println(strDate); // => Mon Dec 31 10:33:59 JST 2018

String→Date

  • parseメソッドを用いた変換
    • あらかじめフォーマットを決める必要がある
    • parseメソッドを使うクラスでParseExceptionを宣言する必要がある
public static void main(String[] args) throws ParseException{
   String strDate = "2018-12-31";
   SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
   Date date = dateFormat.parse(strDate);

   System.out.println(date); // => Mon Dec 31 00:00:00 JST 2018
}
  • valueOf(String s)メソッドを用いた変換
    • valueOfメソッドの戻り値はjava.sql.Dateオブジェクトになる

String strDate = "2018-12-31";
Date sqlDate = java.sql.Date.valueOf(strDate);

System.out.println(sqlDate); // => 2018-12-31

Date⇄Calendarの変換

Date→Calendar

  • Calendarクラスの新規インスタンスを作成
  • setTime(Date date)メソッドを使ってCalendarクラスのオブジェクトに変換
Date date = new Date(); // 今日の日付
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);

System.out.println(calendar);
// =>java.util.GregorianCalendar[time=1546228443561,areFieldsSet=true, ...]

Calendar→Date

  • getTime()メソッドでDateクラスのオブジェクトに変換
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, 2018); //年を設定
calendar.set(Calendar.MONTH, 11); //月を設定(※MONTHは0始まり 0→Jan、1→Feb、...になる)
calendar.set(Calendar.DAY_OF_MONTH, 31);//日を設定
Date date = calendar.getTime();

System.out.println(date); // => Mon Dec 31 13:01:05 JST 2018

参考サイト

さいごに

自分が実装したことのある日付データの扱い方についてまとめてみました。
もし「こうした方がいい」「こうすることが多いよ」等あればアドバイスいただけると嬉しいです!
良いお年を!

69
75
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
69
75