【Java】parseを使って、日付の文字列(String)をDate型へ変換する!
文字列を日付に変換するには、DateFormatクラスとSimpleDateFormatクラスのparseメソッドを使用します。
変換するには、DateFormatクラスとSimpleDateFormatクラスにアクセスする必要があり、アクセスすることでDateFormatクラスとSimpleDateFormatクラスで準備されているparseメソッドを使用できるようになります。
今回はSimpleDateFormatクラスのparseメソッドを使って以下の場合でString型の日付からDate型への変換していきます。
⚫︎ フォーマットを指定して日付のString型をDate型へ変換する場合
⚫︎ 存在しない日付を指定してString型をDate型へ変換する場合
目次
parseメソッドとは
SimpleDateFormatクラスのparseメソッドとは文字列をDateクラスのインスタンスを戻り値として返すメソッドです。
parseメソッドは文字列をDateクラスのインスタンスを返せない場合は、ParseExceptionのエラーが発生します。
parseメソッドの書き方
まず、java.text.SimpleDateFormatとjava.util.Dateをインポートします。
1 2 |
import java.text.SimpleDateFormat; import java.util.Date; |
Date型に変換したい文字列を変数に格納します。
例えば、2019年5月7日をDate型で表示したいなら以下のように記載します。
1 |
String A ="07/05/2019"; |
Date型である変数を定義し、SimpleDateFormatをインスタンス化した後に先ほど文字列型で定義した変数をparseメソッドを使ってString型からDate型へ変換します。
1 |
Date B = new SimpleDateFormat("dd/MM/yyyy").parse(A); |
次の例では、parseメソッドを使ってString型の変数をからDate型へ変換しています。
例
1 2 3 4 5 6 7 8 9 10 11 |
import java.text.SimpleDateFormat; import java.util.Date; public class Main { public static void main(String[] args) throws Exception { String sDate1="16/06/2020"; Date date1=new SimpleDateFormat("dd/MM/yyyy").parse(sDate1); System.out.println(sDate1); System.out.println(date1); } } |
出力結果
16/06/2020
Tue Jun 16 00:00:00 UTC 2020
sDate1ではString型で入力していましたが、Date型のdate1をparseメソッド
を使用することで、String型からDate型へ変更した値をdate1へ格納することができました。
parseはtry-catch文で囲む必要がある
SimpleDateFormatに設定した日付のフォーマットと文字列の日付のフォーマットが一致しなかった場合にはParseExceptionのエラーが発生します。
その為、日付の文字列(String)をDate型へ変換する場合はtry-catch文で囲むようにしましょう。
日付文字列からDate型へと変換するサンプルコード
日付文字列からDate型へと変換するサンプルコードを見てみます。
フォーマットを指定して変換する場合
年月日に変換する例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import java.text.SimpleDateFormat; import java.util.Date; public class Main { public static void main(String[] args)throws Exception { String sDate1 = "16/06/2020"; String sDate2 = "16-Jun-2020"; String sDate3 = "06 16, 2020"; SimpleDateFormat format1 = new SimpleDateFormat("dd/MM/yyyy"); SimpleDateFormat format2 = new SimpleDateFormat("dd-MMM-yyyy"); SimpleDateFormat format3 = new SimpleDateFormat("MM dd, yyyy"); Date date1 = format1.parse(sDate1); Date date2 = format2.parse(sDate2); Date date3 = format3.parse(sDate3); System.out.println(sDate1+"\t"+date1); System.out.println(sDate2+"\t"+date2); System.out.println(sDate3+"\t"+date3); } } |
出力結果
16/06/2020 Tue Jun 16 00:00:00 UTC 2020
16-Jun-2020 Tue Jun 16 00:00:00 UTC 2020
06 16, 2020 Tue Jun 16 00:00:00 UTC 2020
年月日曜日に変換する例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import java.text.SimpleDateFormat; import java.util.Date; public class Main { public static void main(String[] args)throws Exception { String sDate4 = "Thu, Dec 16 2020"; SimpleDateFormat format4 = new SimpleDateFormat("E, MMM dd yyyy"); Date date4 = format4.parse(sDate4); System.out.println(sDate4+"\t"+date4); } } |
出力結果
Thu, Dec 16 2020 Wed Dec 16 00:00:00 UTC 2020
年月日曜日時分秒に変換する例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import java.text.SimpleDateFormat; import java.util.Date; public class Main { public static void main(String[] args)throws Exception { String sDate5 = "Thu, Dec 16 2020 20:30:50"; SimpleDateFormat format5 = new SimpleDateFormat("E, MMM dd yyyy HH:mm:ss"); Date date5 = format5.parse(sDate5); System.out.println(sDate5+"\t"+date5); } } |
出力結果
Thu, Dec 16 2020 20:30:50 Wed Dec 16 20:30:50 UTC 2020
年月日時分秒に変換する例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import java.text.SimpleDateFormat; import java.util.Date; public class Main { public static void main(String[] args)throws Exception { String sDate6 = "16-Jun-2020 20:30:50"; SimpleDateFormat format6 = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss"); Date date6 = format6.parse(sDate6); System.out.println(sDate6+"\t"+date6); } } |
出力結果
16-Jun-2020 20:30:50 Tue Jun 16 20:30:50 UTC 2020
SimpleDateFormatでフォーマットを指定し、parseメソッドを使用することで文字列からDate型へ変換することができました。
存在しない日付を指定して変更する場合
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import java.text.SimpleDateFormat; import java.util.Date; public class Main { public static void main(String[] args) throws Exception { SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date date = sdf.parse("2020/07/06 29:89:88"); System.out.println(date); } } |
出力結果
Tue Jul 07 06:30:28 UTC 2020
29時89分88秒は存在しませんので日付が繰り上げられるようになります。
今回のポイント
parseメソッドで日付の文字列をDate型へ変換
日付文字列を「Date」インスタンスに変換するにはSimpleDateFormatクラスのparseメソッドを使用する
⚫︎ 「SimpleDateFormat」クラスを使用することで、日付文字列を「Date」インスタンスに変換することができ、指定したStringのフォーマットからDate型に変換できる
⚫︎ パターン文字列、ロケールの指定方法も、日付を文字列に変換する場合と同様に行い、年を指定しなかった場合は、1970年になり、日を指定しなかった場合は、1日になる
⚫︎ その他のフィールドが指定されなかった場合には、それぞれ「0」が設定され、存在しない日時が指定された場合は、その日付から繰り上げる
(例えば、4月31日と指定した場合は5月1日となる)
⚫︎ SimpleDateFormatクラスのsetLenientメソッドで「false」を指定することで、4月31日などの存在しない日時があった場合、「ParseException」例外が発生させるなど日付の設定を厳密に行うことができる
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。