Javaで文字列から日付を解析する方法:SimpleDateFormatを使った日付フォーマットの変換
Javaでは、java.textパッケージに含まれるSimpleDateFormatクラスを使用することで、日付を任意の形式(ロケール対応)でフォーマットしたり、文字列から解析(パース)したりすることができます。
このクラスのコンストラクタの一つは、希望する日付フォーマットを表すString型の値を受け取り、SimpleDateFormatオブジェクトを生成します。
また、このクラスが提供するformat()メソッドは、java.util.Dateオブジェクトを引数として受け取り、現在のオブジェクトが表すフォーマットに従った日付・時刻の文字列を返します。
日付文字列を別のフォーマットに変換する手順
- 入力された日付文字列を取得します。
- その文字列をjava.util.Dateオブジェクトに変換します。
- 新しい(希望する)フォーマットを文字列としてコンストラクタに渡し、SimpleDateFormatクラスをインスタンス化します。
- 上記で取得したDateオブジェクトを引数としてformat()メソッドを呼び出します。
サンプルコード
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class FormattingDate {
public static Date StringToDate(String dob) throws ParseException {
// SimpleDateFormatクラスのインスタンス化
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
// 指定された文字列をDateオブジェクトに解析
Date date = formatter.parse(dob);
System.out.println("Date object value: "+date);
return date;
}
public static void main(String args[]) throws ParseException {
// ユーザーから名前と生年月日を読み込む
Scanner sc = new Scanner(System.in);
System.out.println("Enter your name: ");
String name = sc.next();
System.out.println("Enter your date of birth (dd-MM-yyyy): ");
String dob = sc.next();
// 文字列をDateに変換
Date date = FormattingDate.StringToDate(dob);
System.out.println("Select format: ");
System.out.println("a: MM-dd-yyyy || b: dd-MM-yyyy || c: yyyy-MM-dd ");
char ch = sc.next().toCharArray()[0];;
switch (ch) {
case 'a':
System.out.println("Date in the format: MM-dd-yyyy");
System.out.println(new SimpleDateFormat("MM-dd-yyyy").format(date));
break;
case 'b':
System.out.println("Date in in the format: dd-MM-yyyy");
System.out.println(new SimpleDateFormat("dd-MM-yyyy").format(date));
break;
case 'c':
System.out.println("Date in the format: yyyy-MM-dd");
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));
break;
default:
System.out.println("Model not found");
break;
}
}
}実行結果
Enter your name: Krishna Enter your date of birth (dd-MM-yyyy): 26-09-1989 Date object value: Tue Sep 26 00:00:00 IST 1989 Select format: a: MM-dd-yyyy || b: dd-MM-yyyy || c: yyyy-MM-dd a Date in the format: MM-dd-yyyy 09-26-1989
補足:より新しいAPI「java.time」について
上記のSimpleDateFormatはJava 8以前から使われている伝統的な手法ですが、スレッドセーフではないという注意点があります。Java 8以降では、スレッドセーフで直感的なjava.timeパッケージ(DateTimeFormatter、LocalDateなど)の使用が推奨されています。新規プロジェクトでは、以下のように記述することもできます。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class ModernDateExample {
public static void main(String[] args) {
DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate date = LocalDate.parse("26/09/1989", inputFormat);
DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");
System.out.println(date.format(outputFormat)); // 1989-09-26
}
}用途や対象のJavaバージョンに応じて、適切なAPIを選択するとよいでしょう。
-
MySQLでDD/MM/YYYY形式の日付をSELECTして降順に並べ替える方法
MySQLでは、SELECTとORDER BY ... DESCを組み合わせることで、DD/MM/YYYY形式で保存された日付文字列を正しく日付として解釈し、新しい順(降順)に並べ替えて取得できます。基本となる構文は以下の通りです。SELECT *FROM yourTableName where yourDatetimeColumnName order by STR_TO_DATE(yourDatetimeColumnName,%d/%m%Y) desc;ここでのポイントはSTR_TO_DATE()関数です。「日/月/年」形式の文字列をMySQLが認識できる日付値に変換してくれるため、単純な文
-
PHP・MySQLで日付形式をdd/mm/yyyyに変更する方法
PHPやMySQLでは、日付の表示形式を自由に変更できます。本記事では、日付を「dd/mm/yyyy(日/月/年)」形式に変換する方法を、PHPとMySQLそれぞれのケースについて解説します。PHPで日付形式を変更する方法PHPでは、date()関数を使って日付形式を簡単に変更できます。基本構文は以下の通りです。date(d/m/Y, 日時の変数);また、文字列を日付として扱う場合は、strtotime()関数を使用します。この関数は、日付を表す文字列をUnixタイムスタンプに変換してくれるため、date()関数と組み合わせて使うのが一般的です。以下は、日時を「dd/mm/yyyy」形式に整形