Javaで日付文字列を解析する方法|SimpleDateFormat・LocalDate・DateUtils・Instantの使い方
Javaで文字列から日付を解析する主な方法
Javaでは、日付情報を含む文字列をDate型やLocalDate型などの日付オブジェクトに変換する(解析する)方法が複数用意されています。代表的な手法は以下の4つです。
- SimpleDateFormatクラス:コンストラクタに希望する日付形式(パターン)を表す文字列を渡してインスタンスを作成し、
parse()メソッドで日付文字列を解析します。 - LocalDateクラス:
parse()メソッドに日付を表す文字列を渡すと、LocalDateオブジェクトが返されます。 - DateUtilsクラス(Apache Commons):org.apache.commonsパッケージに含まれるユーティリティクラスです。
parseDate()メソッドにフォーマット文字列と日付文字列を渡すと、Dateオブジェクトが返されます。 - Instantクラス:java.time.Instantの
parse()メソッドは、日付文字列を引数として受け取り、その日時を表すInstantオブジェクトを返します。
1. SimpleDateFormatクラスを使う方法
java.text.SimpleDateFormatは、古くから利用されてきた日付の解析・整形用クラスです。パターン文字列を指定することで、任意の形式の日付文字列を解析できます。
サンプルコード
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Sample {
public static void main(String args[]) throws ParseException {
String date_string = "2007-25-06";
// SimpleDateFormatクラスのインスタンスを生成
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-dd-MM");
// 文字列をDateオブジェクトへ解析
Date date = formatter.parse(date_string);
System.out.println("Date value: " + date);
}
}実行結果
Date value: Mon Jun 25 00:00:00 IST 2007この例ではパターンを「yyyy-dd-MM」としているため、文字列は「年-日-月」の順に解釈され、「2007-25-06」は2007年6月25日として解析されます。
2. LocalDateクラスを使う方法
Java 8以降で導入されたDate-Time API(java.time)のLocalDateクラスを使うと、ISO-8601形式(yyyy-MM-dd)の日付文字列をシンプルに解析できます。
サンプルコード
import java.time.LocalDate;
public class Test {
public static void main(String args[]) {
LocalDate date = LocalDate.parse("2007-12-03");
System.out.println(date);
}
}実行結果
2007-12-033. DateUtilsクラス(Apache Commons Lang)を使う方法
Apache Commons Langライブラリに含まれるorg.apache.commons.lang3.time.DateUtilsは、日付操作のための便利なユーティリティを提供します。parseDate()メソッドに日付文字列とパターンを渡すだけで解析できます。
サンプルコード
import java.text.ParseException;
import java.util.Date;
import org.apache.commons.lang3.time.DateUtils;
public class Test {
public static void main(String args[]) throws ParseException {
String dateInString = "2013-07-06";
Date date = DateUtils.parseDate(dateInString, "yyyy-MM-dd");
System.out.println(date);
}
}実行結果
Sat Jul 06 00:00:00 IST 2013なお、parseDate()はParseExceptionをスローする可能性があるため、try-catch文またはthrows句による例外処理が必要です。
4. Instantクラスを使う方法
java.time.Instantは、タイムライン上の特定の時点(UTC基準)を表すクラスです。parse()メソッドには、末尾に「Z」が付いたISO-8601形式の日時文字列を渡します。
サンプルコード
import java.time.Instant;
public class Test {
public static void main(String args[]) {
String dateInString = "2014-10-05T15:23:01Z";
Instant instant = Instant.parse(dateInString);
System.out.println(instant);
}
}実行結果
2014-10-05T15:23:01Zまとめ:どの方法を選ぶべきか
新規プロジェクトでは、スレッドセーフで直感的に扱えるjava.time API(LocalDateやDateTimeFormatterなど)の使用が推奨されます。SimpleDateFormatはレガシーなコードとの互換性が必要な場合に限定して使うのがよいでしょう。また、複数のパターンを柔軟に解析したい場合には、Apache Commons LangのDateUtilsが有力な選択肢となります。
-
JavaでJSONをパース(解析)する方法|org.json・Gson・JsonPathの使い方を解説
このチュートリアルでは、JavaでJSONを解析(パース)する方法を、複数のライブラリの使い方とあわせて解説します。 JSONとは「JavaScript Object Notation」の略称で、JavaScriptのサブセットをベースとした軽量なデータ形式です。 データ交換フォーマットとして広く普及しており、Webプログラミングにおいて不可欠な技術となっています。本記事では、org.jsonライブラリを使ったJSONのパース方法を中心に紹介します。 まず基本をおさらいしましょう。JSONオブジェクトは「キーと値のペア」から構成される順序のない集合です。一方、JSON配列は値が順序付けて格納さ
-
Javaで文字列を比較する方法|equals()とequalsIgnoreCase()の使い分けを徹底解説
Javaで文字列の等価性を比較する際は、Stringクラスが提供するequalsメソッドまたはequalsIgnoreCaseメソッドを使用するのが基本です。この記事では、それぞれのメソッドの使い方に加えて、==演算子で文字列を比較してはいけない理由についても詳しく解説します。 equals()メソッドで文字列を比較する 2つの文字列を比較し、大文字と小文字の違いまで厳密に判定したい場合はequals()メソッドを使用します。 次のコード例では、2つのStringインスタンスが大文字小文字を含むすべての文字において一致しているかどうかを判定しています。 public class Compare