現場でも使用頻度が非常に高い
日付を扱ったソースについて
解説していきたいと思います。
どんなプログラム開発にも
日付は切っても切れない関係です。
また画面側に表示されなくてもバックエンドで
処理をしていることが非常に多いので
現場でも必須になってくる部分だと思います。
まず日付を扱うクラスは
大きく分けて3つに分類されます。
Dateクラス
- Javaで時刻情報を取り扱う場合い標準的に利用される
- java.util パッケージに属している
- 内部にエボックからの経過ミリ秒数をlong値で保持している
※エボックとは、基準時刻である1970年元日0時ちょうどのこと - newにて引数なしでインスタンス生成をすると、現在の日時情報が格納される
- newにてlong値を引数として渡してインスタンス生成すると、指定時刻の情報が格納される
- getTime()やsetTime()を用いて、インスタンス内にほあじするlong値を取得・設定できる
Calendarクラス
- 「年・月・日・時・分・秒」などの各情報を取り扱うにはjava.util.Calendarを用いる
- 「月」の情報を取得・設定する場合は1~12ではなく0~11で指定する
指定した日時を設定でき計算や参照など利用できる範囲が広い
SimpleDateFomatクラス
- Dateクラスが保持する日時情報を「2017/12/24」のように読みやすく変換するにはjava.text.SimpleDateFormatクラスを利用する
※上の図に記載してある各クラスの関係性を参照
String型からDate型に変換する場合は
SimpleDateFormatクラスを使用します。
SimpleDateFormatクラスは名前の通り、
文字列のフォーマットを指定して
parseメソッドでDate型に変換します。
String型からDate型に変換する方法①~try-catch~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class ChangeFromStringToDate { public static void main(String[] args) { try { String stDate = "2017/10/14 01:23:45"; System.out.println("String型 = " + stDate); Date date = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss").parse(stDate); System.out.println("Date型 = " + date); } catch (ParseException ex) { ex.printStackTrace(); } } } |
String型からDate型に変換する方法②~throws ParseException~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class ChangeFromStringToDate { public static void main(String[] args) throws ParseException { String stDate = "2017/10/14 01:23:45"; System.out.println("String型 = " + stDate); Date date = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss").parse(stDate); System.out.println("Date型 = " + date); } } |
実行結果
1 2 |
String型 = 2017/10/14 01:23:45 Date型 = Sat Oct 14 01:23:45 JST 2017 |
SimpleDateFormatを使って
フォーマットを指定した後に、
parseメソッドでDate型に変換した内容です。
この場合、ParseExceptionが発生しますので
例外処理が必要になってきます。
- ①はtry-catchを使用
- ②はスロー宣言の追加でthrows ParseExceptionを使用
※上の図に記載してある各クラスの関係性を参照
String型からDate型に変換する場合は
SimpleDateFormatクラスを使用します。
SimpleDateFormatクラスは名前の通り、
文字列のフォーマットを指定して
formatメソッドでString型に変換します。
Date型からString型に変換する方法①~try-catch~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class ChangeFromDateToString { public static void main(String[] args) { try { String stDate = "2017/10/14 01:23:45"; Date date = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss").parse(stDate); System.out.println("Date型 = " + date); String str = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(date); System.out.println("String型 = " + str); } catch (ParseException ex) { ex.printStackTrace(); } } } |
Date型からString型に変換する方法②~throws ParseException~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class ChangeFromDateToString { public static void main(String[] args) throws ParseException { String stDate = "2017/10/14 01:23:45"; Date date = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss").parse(stDate); System.out.println("Date型 = " + date); String str = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(date); System.out.println("String型 = " + str); } } |
実行結果
1 2 |
Date型 = Sat Oct 14 01:23:45 JST 2017 String型 = 2017-10-14 01:23:45 |
SimpleDateFormatを使って
フォーマットを指定した後に、
formatメソッドでString型に変換した内容です。
この場合も、String型→Date型の変換があり
ParseExceptionが発生しますので
例外処理が必要になってきます。
- ①はtry-catchを使用
- ②はスロー宣言の追加でthrows ParseExceptionを使用
String型からSQLのDate型に変換する場合は
”yyyy-mm-dd”のフォーマットを使用します。
valueOfメソッドでDate型に変換します。
String型からSQLのDate型に変換する方法
1 2 3 4 5 6 7 8 9 10 |
import java.sql.Date; public class ChangeFromStringToSqlDate { public static void main(String[] args){ Date sqlDate= Date.valueOf("2017-10-14"); System.out.println("SQLのDate型 = " + sqlDate); } } |
実行結果
1 |
SQLのDate型 = 2017-10-14 |
カレンダークラスは日付の操作、
計算などを扱うクラスになっています。
クラスの名前の通りCalendarと同じように
日付や曜日などが設定、
参照できるクラスです。
Calendarは私達の私生活に溶け込んでいるので
使いやすく理解もしやすいことが特徴です。
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 |
import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.HashMap; import java.util.List; public class CalendarSample { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); int year = 2020; // 年 int month = 4 - 1; // 月( 0~11:1月~12月 ) int date = 7; // 日 cal.set(year, month, date); //個別で指定したい場合、年、月、日 //cal.set(Calendar.YEAR, year); //cal.set(Calendar.MONTH, month); //cal.set(Calendar.DATE, date); //曜日(1~7:日~土) HashMap<Integer, String> hash = new HashMap<Integer, String>(); List<String> list = new ArrayList<>(); Collections.addAll(list, "(日曜)", "(月曜)", "(火曜)", "(水曜)", "(木曜)", "(金曜)", "(土曜)"); int i = 1; for (String day : list) { hash.put(i, day); i++; } System.out.println("1:cal.setで指定した年を表示 : " + cal.get(Calendar.YEAR)); System.out.println("2:cal.setで指定した月を表示 : " + cal.get(Calendar.MONTH) + "(" + (cal.get(Calendar.MONTH) + 1) + "月)"); System.out.println("3:cal.setで指定した日付を表示 : " + cal.get(Calendar.DATE)); System.out.println("4:cal.setで指定した日付が年の何日目なのかを表示 : " + cal.get(Calendar.DAY_OF_YEAR)); System.out.println("5:cal.setで指定した日付が月の何日目なのかを表示 : " + cal.get(Calendar.DAY_OF_MONTH)); System.out.println("6:cal.setで指定した日付の曜日を表示 : " + cal.get(Calendar.DAY_OF_WEEK) + hash.get(cal.get(Calendar.DAY_OF_WEEK))); System.out.println("7:cal.setで指定した日付の曜日が月の何度目なのかを表示 : " + cal.get(Calendar.DAY_OF_WEEK_IN_MONTH)); System.out.println("8:cal.setで指定した日付が年の何週目なのかを表示 : " + cal.get(Calendar.WEEK_OF_YEAR)); System.out.println("9:cal.setで指定した日付が月の何週目なのかを表示 : " + cal.get(Calendar.WEEK_OF_MONTH)); } } |
実行結果
1 2 3 4 5 6 7 8 9 |
1:cal.setで指定した年を表示 : 2020 2:cal.setで指定した月を表示 : 3(4月) 3:cal.setで指定した日付を表示 : 7 4:cal.setで指定した日付が年の何日目なのかを表示 : 98 5:cal.setで指定した日付が月の何日目なのかを表示 : 7 6:cal.setで指定した日付の曜日を表示 : 3(火曜) 7:cal.setで指定した日付の曜日が月の何度目なのかを表示 : 1 8:cal.setで指定した日付が年の何週目なのかを表示 : 15 9:cal.setで指定した日付が月の何週目なのかを表示 : 2 |
Calendarクラスのメソッドも数多く
SimpleDateFormatクラスとの相性が抜群です。
CalendarクラスのgetTimeメソッドは
指定した書式のフォーマットで
日時を取得できます。
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 |
import java.text.SimpleDateFormat; import java.util.Calendar; public class FormatChangeSample { public static void main(String[] args) { //現在のカレンダー情報を取得 Calendar cal = Calendar.getInstance(); //指定した書式フォーマットで日時を取得 SimpleDateFormat sdf = new SimpleDateFormat("1: y/M/d"); System.out.println(sdf.format(cal.getTime())); //各フォーマットに変更 sdf.applyPattern("2: yyyy/MM/dd"); System.out.println(sdf.format(cal.getTime())); sdf.applyPattern("3: yyyy/MM/dd (E)"); System.out.println(sdf.format(cal.getTime())); sdf.applyPattern("4: G yyyy年MM月dd日"); System.out.println(sdf.format(cal.getTime())); sdf.applyPattern("5: yyyy年MM月dd日 → 今年D日目"); System.out.println(sdf.format(cal.getTime())); sdf.applyPattern("6: yyyy年MM月dd日 → F回目のE曜日"); System.out.println(sdf.format(cal.getTime())); sdf.applyPattern("7: yyyy年MM月dd日 → 今年w週目"); System.out.println(sdf.format(cal.getTime())); sdf.applyPattern("8: yyyy年MM月dd日 → 今月W週目"); System.out.println(sdf.format(cal.getTime())); } } |
実行結果
1 2 3 4 5 6 7 8 |
1: 2016/4/7 2: 2016/04/07 3: 2016/04/07 (木) 4: 西暦 2016年04月07日 5: 2016年04月07日 → 今年98日目 6: 2016年04月07日 → 1回目の木曜日 7: 2016年04月07日 → 今年15週目 8: 2016年04月07日 → 今月2週目 |
日付データの扱いは使用頻度が高く
プログラムと切り離すことができません。
各パターンを習得すれば
応用することもできます。
基本的な使い方とクラス、
メソッドの詳細についても
覚えておきましょう。
この記事へのコメントはありません。