【Java】parseを使って日付文字列をDateのインスタンスに変換する!
日付文字列をDateのインスタンスに変換するにはSimpleDateFormatクラスのparseメソッドを使用します。
SimpleDateFormatクラスを使用すると、日本の場合は平成、昭和といった元号があるように、国々で独自の日付・時刻のフォーマットへ変換して表示することができます。
今回はparse()メソッドを使って、
・ 日本語(グレゴリオ暦)の場合
・ 日本語(和暦)の場合
・ 英語の場合
・ 存在しない日付を指定した場合
の日付文字列をDateのインスタンスに変換していきます。
目次
parse()メソッドとは
SimpleDateFormatクラスのparse()メソッドは日付文字列を「Date」インスタンスに変換します。
parse()メソッドの書き方
parse()メソッドの構文は下記となります。
1 |
SimpleDateFormat.parse(日付の文字列); |
パラメータ
・ 日付の文字列
日付を生成するために解析される文字列を参照します。
戻り値
文字列から解析された日付を返すか、エラーの場合はNullを返します。
日付文字列をDateのインスタンスに変換するサンプルコード
日付文字列をDateのインスタンスに変換するサンプルコードを紹介します。
・ 日本語(グレゴリオ暦)の場合
・ 日本語(和暦)の場合
・ 英語の場合
・ 存在しない日付を指定した場合
の日付文字列をDateのインスタンスに変換してみます。
日本語(グレゴリオ暦)の場合
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// 日付文字列をDateインスタンスに変換する import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class Main { public static void main(String[] args) throws Exception { //デフォルトロケール // 日本語 (グレゴリオ暦) SimpleDateFormat sdf = new SimpleDateFormat( "GGGGy年 M月 d日 (E) a h時 m分 s秒 Z"); Date date1 = sdf.parse( "西暦2020年 4月 1日 (水) 午後 4時 35分 30秒 +0900"); System.out.println(date1); } } |
出力結果
Wed Apr 1 14:35:30 UTC 2020
get()メソッドを使ってマップの値を取り出しました。
日本語(和暦)の場合
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// 日付文字列をDateインスタンスに変換する import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class Main { public static void main(String[] args) throws Exception { // 日本語(和暦) Locale locale = new Locale("ja", "JP", "JP"); SimpleDateFormat sdf = new SimpleDateFormat( "GGGGY年 M月 d日 EEEE a h時 m分 s秒 Sミリ秒", locale); Date date2 = sdf.parse( "令和02年 4月 19日 日曜日 午後 2時 11分 52秒 599ミリ秒"); System.out.println(date2); } } |
出力結果
Sun Apr 19 14:11:52 UTC 2020
キー6の場合は値が入っていないため、nullが返されました。
英語の場合
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// 日付文字列をDateインスタンスに変換する import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class Main { public static void main(String[] args) throws Exception { // 英語 Locale locale = new Locale("en", "US"); SimpleDateFormat sdf = new SimpleDateFormat( "EEE, MMM d, y G hh:mm a", locale); Date date3 = sdf.parse("Sun, Apr 19, 2020 AD 02:11 PM"); System.out.println(date3); } } |
出力結果
Sun Apr 19 14:11:00 UTC 2020
存在しない日付を指定した場合
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// 日付文字列をDateインスタンスに変換する import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class Main { public static void main(String[] args) throws Exception { // 存在しない日付を指定した場合 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date date4 = sdf.parse("2020/04/31 30:99:99"); System.out.println(date4); } } |
出力結果
Sat May 02 07:40:39 UTC 2020
今回のポイント
parseで日付文字列をDateのインスタンスに変換
日付文字列を「Date」インスタンスに変換するにはSimpleDateFormatクラスのparseメソッドを使用する。
• 日付を文字列に変換する場合と同様に、SimpleDateFormatクラスを使用することで日付文字列を「Date」インスタンスに変換する
• パターン文字列、ロケールの指定方法も、日付を文字列に変換する場合と同様に年を指定しなかった場合は1970年になり、日を指定しなかった場合は1日になるがフィールドが指定されなかった場合には、それぞれ「0」が設定される
• 存在しない日時が指定された場合、4月31日が5月1日になることから、その分を繰り上げられる
• 4月31日などのの存在しない日時を厳密に解析したい場合は、SimpleDateFormatクラスのsetLenientメソッドで「false」を指定することで「ParseException」例外が発生させることができる
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。