JavaでString型の日付からLocalDate型に変換する方法の一例です。
今回調べた経緯は、Java Persistence API(JPA)を使用したAPIを実装中に、
String型で格納したyyyyMMddの形式の文字列をLocalDate型に変換する必要があったためです。
前提
本投稿ではJavaのバージョンは8を使用しています。
紹介する内容はあくまでも一例なので、あしからず。
文字列 "yyyyMMdd" → LocalDate型への変換
とりあえず、下記のメソッドを作る
Sample.java
// 文字列の日付をフォーマット(yyyyMMddやyyyy/mm/ddなど)をもとにLocalDate型に変換するメソッド
public static LocalDate convertToLocalDate(String date,String format) {
// シンプルにLocalDate型に変換された日付を返却
return LocalDate.parse(date, DateTimeFormatter.ofPattern(format));
}
結果を確認するため出力する
Sample.java
public class Sample {
public static void main (String args[]) {
System.out.println(convertToLocalDate("19990707", "yyyyMMdd"));
}
出力結果はこのような感じになる
結果
1999-07-07
クラスDateTimeFormatterには事前定義されたフォーマッタがあるらしく、
そちらを使った例がこちら
Sample2.java
// 引数を文字列dateとDateTimeFormatterクラスのインスタンスに変更
public static LocalDate convertStringToLocalDate(String date,DateTimeFormatter formatter) {
return LocalDate.parse(date,formatter);
}
今回使うフォーマッタはこれ → BASIC_ISO_DATE ("基本的なISO日付"との説明がoracleのページにありました)
要は、BASIC_ISO_DATEが実現できるのは"yyyymmdd"の形式のフォーマッタを担うことらしい。
Sample2.java
public class Sample2 {
public static void main (String args[]) {
System.out.println(convertStringToLocalDate("18980401", DateTimeFormatter.BASIC_ISO_DATE));
}
結果はSample.javaと同じになる
結果
1898-04-01
#####その他
初投稿なので投稿自体が不慣れですが、根気よく続けていきたいと思います。
アドバイス、御指摘など大歓迎です