Javaで日付を加算する方法を解説!Date型とCalendarクラスを使おう

- システム
エンジニア - Javaで日付を加算する方法が知りたいです。
- プロジェクト
マネージャー - Date型とCalendarクラスのメソッドを使用する方法などを紹介しますので、一緒に見ていきましょう。
Javaで日付を加算する方法とは?
今回は、Javaで日付を加算する方法について説明します。
JavaではDate型とCalendarクラスのメソッドを使うことで、日付が加算できます。Date型とは、主に指定した日付や時間を取得する目的で用いられる型で、1970年1月1日0時からの経過時間を持っています。
試しにDate型の現在の日時をコンソール出力してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import java.util.*; import java.text.SimpleDateFormat; import java.util.Date; public class Main { public static void main(String[] args) throws Exception { Date date = new Date(); System.out.println(date); } } |
上記プログラムを実行すると、下記のように出力されます。
Mon Jun 07 13:13:42 UTC 2021
CalendarクラスはDate型と同様に、日時の処理を扱うためにJavaで用意されているクラスです。Date型との違いは、Date型が主に日時の表示に使われるのに対し、Calendarクラスは年月日の加算など、日付を計算するためにJavaで使用されます。
Date型の日付を計算する場合は、下記のようにCalendarクラスに変換したうえで計算します。
1 2 3 4 |
Calendar cdr = Calendar.getInstance(); cdr.setTime(Date型変数); |
この記事ではDate型とCalendarクラスを使った日付の加算方法を解説しますので、興味のある方はぜひご覧ください。
Javaで日付を加算する方法
JavaのDate型とCalendarクラスについて紹介しました。続いて、日付の加算方法について説明します。
Date型の日付を加算するには、Calendarクラスに変換後、Calendarクラスのaddメソッドを使用します。
1 2 3 |
Calendarクラスの変数.add(int field, int amount) |
第1引数には加算したい時間量を指定します。例えば「年」を加算する場合はCalendar.YEARを、「月」を加算する場合はCalendar.MONTHを、というように、それぞれの時間量に対して下記のように指定できます。
・年 Calendar.YEAR
・月 Calendar.MONTH
・日 Calendar.DAY_OF_MONTH
・時間 Calendar.HOUR_OF_DAY
・分 Calendar.MINUTE
第2引数には加算量を指定しましょう。例えば翌日を取得する場合は第1引数にCalendar.DAY_OF_MONTHと指定したうえで、第2引数に1を指定します。減算も可能で、例えば先日の日付を取得する場合は第2引数に-1を指定します。
String型の日付文字列を加算する方法
下記のサンプルはyyyyMMdd形式のString型の日付文字列に対して、年月日の加算と減算をするソースコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
import java.util.*; import java.util.Calendar; import java.util.Date; import java.text.SimpleDateFormat; import java.sql.Timestamp; public class Main { public static void main(String[] args) throws Exception { // yyyyMMdd形式の日付文字列 String yyyymmddStr = "20210630"; // Date型に変換 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); Date dt = sdf.parse(yyyymmddStr); System.out.println("当日:" + yyyymmddStr); // Calendarクラスのインスタンスを生成 Calendar cal = Calendar.getInstance(); // 計算結果をyyyyMMdd形式で出力 // 1日加算 cal.setTime(dt); cal.add(Calendar.DATE, 1); System.out.println("翌日:" + sdf.format(cal.getTime())); // 1日減算 cal.setTime(dt); cal.add(Calendar.DATE, -1); System.out.println("前日:" + sdf.format(cal.getTime())); // 1か月加算 cal.setTime(dt); cal.add(Calendar.MONTH, 1); System.out.println("翌月:" + sdf.format(cal.getTime())); // 1年加算 cal.setTime(dt); cal.add(Calendar.YEAR, 1); System.out.println("翌年:" + sdf.format(cal.getTime())); } } |
実行結果は下記のようにコンソール出力されます。
当日:20210630
翌日:20210701
前日:20210629
翌月:20210730
翌年:20220630
文字列の日付を計算するには、まずはDate型に変換します。Date型に変換する際はSimpleDateFormatクラスを使い、コンストラクターの引数にフォーマットを指定しましょう。今回はyyyyMMdd形式の日付のため、引数には”yyyyMMdd”をセットしています。
その後、すでに紹介したCalendarクラスのaddメソッドを用いて加算と減算します。
Timestamp型の日時を加算する方法
続いて、Timestamp型に対して計算する方法を説明します。Timestamp型とは、主にSQLで取得したデータベースの日時を扱うために用いられる日時の型で、
1 2 3 4 5 6 7 8 9 10 11 |
import java.sql.Timestamp; public class Main { public static void main(String[] args) throws Exception { Timestamp timestamp = new Timestamp(System.currentTimeMillis()); System.out.println(timestamp); } } |
Timestamp型は下記のように出力されます。
2021-06-08 18:20:06.362
下記のサンプルは、Timestamp型の日時に対して加算と減算をするソースコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class Main { public static void main(String[] args) throws Exception { // Timestamp型のシステム日時を取得 Timestamp nowDttm = new Timestamp(System.currentTimeMillis()); // Date型へ変換 Date dt = new Date(nowDttm.getTime()); // コンソール表示用の文字列を取得 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH時mm分ss秒"); String yyyyMMddHHmmssStr = sdf.format(nowDttm); System.out.println("現在の日時:" + yyyyMMddHHmmssStr); // Calendarクラスのインスタンスを生成 Calendar cal = Calendar.getInstance(); // 結果をyyyy年MM月dd日HH時mm分ss秒形式で出力 // 1日加算 cal.setTime(dt); cal.add(Calendar.DATE, 1); System.out.println("翌日:" + sdf.format(cal.getTime())); // 1日減算 cal.setTime(dt); cal.add(Calendar.DATE, -1); System.out.println("前日:" + sdf.format(cal.getTime())); // 1か月加算 cal.setTime(dt); cal.add(Calendar.MONTH, 1); System.out.println("翌月:" + sdf.format(cal.getTime())); // 1年加算 cal.setTime(dt); cal.add(Calendar.YEAR, 1); System.out.println("翌年:" + sdf.format(cal.getTime())); } } |
実行結果は下記のようにコンソール出力されます。
現在の日時:2021年06月11日12時48分18秒
翌日:2021年06月12日12時48分18秒
前日:2021年06月10日12時48分18秒
翌月:2021年07月11日12時48分18秒
翌年:2022年06月11日12時48分18秒
String型の変換の時と同様に、Date型に変換したうえでCalendarクラスを用いて計算します。変換は容易で、インスタンス化の引数にTimestamp型を指定することで、Date型へ変換できます。
- システム
エンジニア - String型やTimestamp型もDate型に変換すれば良いのですね。
- プロジェクト
マネージャー - Javaで日付を加算する際は、ぜひこの記事を参考にしてみてください。
Javaで日付を加算してみよう!
いかがだったでしょうか。Javaで日付を加算する方法について説明しました。
JavaではDate型とCalendarクラスのaddメソッドを使うことで日付が加算できます。String型やTimestamp型も、Date型に変換することで日付が計算できます。
Javaで日付を加算する機会があれば、ぜひこの記事を参考に、ご自身でコードを書いてみてください。
FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


Java新着案件New Job
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅)販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅)生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅)社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅)金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅)大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)