目次
Javaのパッケージとは?
Javaには、クラス名を一意に決められるように「パッケージ」という仕組みがあります。
パッケージ(package)は、小包という意味があるように、クラスをグループにまとめて分類・管理できるものです。
クラスをパッケージに所属させるためには、クラスのソースコードの先頭にpackage文を記述します。
これによって、Javaが提供しているクラス以外に個人的に作ったクラスは、パッケージを作成しておくと、既存のクラスと簡単に区別できます。
つまり、多くのクラスを使い分けるのに便利だと言えるのです。
パッケージ外のクラスにアクセスする場合は、import文によって対象のクラスの場所を明示します。
java.utilパッケージとは?
JavaのAPIには、数多くのパッケージとクラスが含まれています。
APIのクラスには「java.」または「javax.」で始まるパッケージ名が利用されています。
「java.util」もその中の一つで、プログラミングを便利にする様々なクラス群が含まれています。
util は ユーティリティのことで、英語で「役に立つもの」という意味があります。
java.utilパッケージの使い方
java.utilパッケージを使うには、ファイルでimport文を記述します。
記述方法は、使いたいクラスを指定するか、「*」でutilパッケージに含まれるクラス全てを読み込めばOKです。
■記述例 // ArrayListクラスを使いたい場合 import java.util.ArrayList; // ArrayListも含めた全てのクラスを使いたい場合 import java.util.*;
java.utilパッケージのDateクラスとは?
Dateクラスは、日時を取得したり、日時を計算したりする際に利用する日付型のクラスです。
Dateクラスオブジェクトの記述ルールは、下記のようになっています。
Date 変数名 = new Date();
java.utilパッケージのDateクラスの使い方
では実際に、Dateクラスの使い方を見ていきましょう。
java.util.dateで日時を加算・減算する
Date型の日時を加算するには、Calendarクラスのaddメソッドを使用します。
記述方法は下記の通りです。
calendar.add(Calendar.加算させたい日時, 加算する値);
第一引数には、Calendarクラスの定数である「YEAR」「MONTH」「DATE」といった値を指定します。
そして、第二引数には加算する値を指定します。
実際にサンプルプログラムを記述してみると、下記のように書けます。
■記述例 import java.util.Date; import java.util.Calendar; public class Main { public static void main(String[] args) { Date date = new Date(); // 現在の日時を表示 System.out.println("現在の日時:" + date); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); // 5日後の日時を表示 calendar.add(Calendar.DAY_OF_MONTH, 5); date = calendar.getTime(); System.out.println("5日後の日時:" + date); // 2ヶ月の日時を表示 calendar.add(Calendar.MONTH, 2); date = calendar.getTime(); System.out.println("2ヶ月後の日時:" + date); // 3年後の日時を表示 calendar.add(Calendar.YEAR, 3); date = calendar.getTime(); System.out.println("3年後の日時:" + date); } } ■実行結果 mbp:desktop potepan$ java Main 現在の日時:Sun Feb 28 12:39:55 JST 2021 5日後の日時:Fri Mar 05 12:39:55 JST 2021 2ヶ月後の日時:Wed May 05 12:39:55 JST 2021 3年後の日時:Sun May 05 12:39:55 JST 2024
指定した日時が加算できているのがわかります。
加算ではなく、減算したい場合は値をマイナスで指定すればOKです。
■記述例 import java.util.Date; import java.util.Calendar; public class Main { public static void main(String[] args) { Date date = new Date(); // 現在の日時を表示 System.out.println("現在の日時:" + date); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); // 5日前の日時を表示 calendar.add(Calendar.DAY_OF_MONTH, -5); date = calendar.getTime(); System.out.println("5日前の日時:" + date); // 2ヶ月前の日時を表示 calendar.add(Calendar.MONTH, -2); date = calendar.getTime(); System.out.println("2ヶ月前の日時:" + date); // 3年前の日時を表示 calendar.add(Calendar.YEAR, -3); date = calendar.getTime(); System.out.println("3年前の日時:" + date); } } ■実行結果 mbp:desktop potepan$ java Main 現在の日時:Sun Feb 28 12:44:32 JST 2021 5日前の日時:Tue Feb 23 12:44:32 JST 2021 2ヶ月前の日時:Wed Dec 23 12:44:32 JST 2020 3年前の日時:Sat Dec 23 12:44:32 JST 2017
なお、Calendarクラスについては以下の記事で詳しく解説しています。
【関連記事】
▶︎【Java入門】日付情報を取得出来るCalendarクラスを理解しよう!
java.util.dateで日時を比較する
日時を比較するには、Dateクラスのbeforeメソッド、afterメソッド、compareToメソッドなどを使います。
それぞれの使用例をサンプルコードで確認しましょう。
■記述例 import java.util.Date; public class Main { public static void main(String[] args) { Date date1 = new Date(2021, 2, 28, 18, 20, 10); Date date2 = new Date(2021, 3, 1, 17, 30, 50); // date1 が date2 よりも前にあるか判定 System.out.println("date1 が date2 よりも前にあるか判定:" + date1.before(date2)); // date2 が date1 よりも前にあるか判定 System.out.println("date2 が date1 よりも前にあるか判定:" + date2.before(date1)); // date1 が date2 よりも後にあるか判定 System.out.println("date1 が date2 よりも後にあるか判定:" + date1.after(date2)); // date2 が date1 よりも後にあるか判定 System.out.println("date2 が date1 よりも後にあるか判定:" + date2.after(date1)); // date1 が date2 よりも前の場合は -1 を返す System.out.println("date1 が date2 よりも前の場合は -1 を返す:" + date1.compareTo(date2)); // date2 が date1 よりも後の場合は 1 を返す System.out.println("date2 が date1 よりも後の場合は 1 を返す:" + date2.compareTo(date1)); // 日時が等しい場合は 0 を返す System.out.println("日時が等しい場合は 0 を返す:" + date1.compareTo(date1)); } } ■実行結果 mbp:desktop potepan$ java Main date1 が date2 よりも前にあるか判定:true date2 が date1 よりも前にあるか判定:false date1 が date2 よりも後にあるか判定:false date2 が date1 よりも後にあるか判定:true date1 が date2 よりも前の場合は -1 を返す:-1 date2 が date1 よりも後の場合は 1 を返す:1 日時が等しい場合は 0 を返す:0
java.util.dateで日付指定する
日付を特定の書式で指定したい場合は、SimpleDateFormatクラスを使います。
任意の日時フォーマットで、Date型の日時を作成可能です。
サンプルコードで見ていきましょう。
■記述例 import java.util.Date; import java.text.ParseException; import java.text.SimpleDateFormat; public class Main { public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); try { Date date = sdf.parse("2021/02/28 13:30:00"); System.out.println(date.toString()); } catch(ParseException e) { e.printStackTrace(); } } } ■実行結果 mbp:desktop potepan$ java Main Sun Feb 28 13:30:00 JST 2021
現在の日時を指定したフォーマットで表示させたい場合は、以下のように書けます。
■記述例 import java.util.Date; import java.text.SimpleDateFormat; public class Main { public static void main(String[] args) { Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd(E) HH:mm:ss"); System.out.println(sdf.format(date)); } } ■実行結果 mbp:desktop potepan$ java Main 2021/02/28(日) 13:32:26
現在日時の取得について
Javaで現在日時を取得する方法には以下の3種類があります。
- Dateクラス
- Calendarクラス
- LocalDateTimeクラス
それぞれを使った記述例は以下の通りです。
■記述例 import java.util.Date; import java.util.Calendar; import java.time.LocalDateTime; import java.text.SimpleDateFormat; import java.time.format.DateTimeFormatter; public class Main { public static void main(String[] args) { SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date date = new Date(); String str1 = format.format(date); System.out.println("--- Dateクラスで現在日時を取得 ---"); System.out.println(str1); Calendar calendar = Calendar.getInstance(); String str2 = format.format(calendar.getTime()); System.out.println("--- Calendarクラスで現在日時を取得 ---"); System.out.println(str2); DateTimeFormatter format2 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); LocalDateTime localDateTime = LocalDateTime.now(); String str3 = localDateTime.format(format2); System.out.println("--- LocalDateTimeクラスで現在日時を取得 ---"); System.out.println(str3); } } ■実行結果 mbp:desktop potepan$ java Main --- Dateクラスで現在日時を取得 --- 2021/02/28 13:46:52 --- Calendarクラスで現在日時を取得 --- 2021/02/28 13:46:52 --- LocalDateTimeクラスで現在日時を取得 --- 2021/02/28 13:46:52
java.util.dateとjava.sql.dateの違い
java.util.dateが日時を取得したり、日時を計算したりする際に利用する日付型のクラスであるのに対し、java.sql.dateは、PreparedStatement に値を渡すときに使います。
Dateの場合は日付の情報のみになり、Timestampの場合は時分秒ミリ秒まで保存可能です。
また、java.sql.date は java.util.dateクラスのサブクラスとなっています。
推奨されていないメソッドを除けば、java.sql.date がオーバーライドしているメソッドは「setTime(long)」と「toString()」だけです。