Javaは初めてです。 Postgres dbの日付形式はyyyy-MM-dd
です。 dd-MM-yyyy
に変換する必要があります。
私はこれを試しましたが、間違った結果が表示されます
public static void main(String[] args) throws ParseException {
String strDate = "2013-02-21";
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
Date da = (Date)formatter.parse(strDate);
System.out.println("==Date is ==" + da);
String strDateTime = formatter.format(da);
System.out.println("==String date is : " + strDateTime);
}
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat format2 = new SimpleDateFormat("dd-MM-yyyy");
Date date = format1.parse("2013-02-21");
System.out.println(format2.format(date));
2つのDateFormat
インスタンスを使用する必要があります。 1つは入力文字列のフォーマットを含み、もう1つは出力文字列に必要なフォーマットを含みます。
public static void main(String[] args) throws ParseException {
String strDate = "2013-02-21";
DateFormat inputFormatter = new SimpleDateFormat("yyyy-MM-dd");
Date da = (Date)inputFormatter.parse(strDate);
System.out.println("==Date is ==" + da);
DateFormat outputFormatter = new SimpleDateFormat("dd-MM-yyyy");
String strDateTime = outputFormatter.format(da);
System.out.println("==String date is : " + strDateTime);
}
これらの形式を参照 Java Date Format Docs :
このコードを試してください:
String myDate= "2013-02-21";
DateFormat iFormatter = new SimpleDateFormat("yyyy-MM-dd");
DateFormat oFormatter = new SimpleDateFormat("dd-MM-yyyy");
String strDateTime = oFormatter.format(iFormatter.parse(myDate));
現在の状態を解析するためのフォーマットと、必要な出力を生成するためのフォーマットが必要です。
String strDate = "2013-02-21";
DateFormat to = new SimpleDateFormat("dd-MM-yyyy"); // wanted format
DateFormat from = new SimpleDateFormat("yyyy-MM-dd"); // current format
System.out.println(to.format(from.parse(strDate)));
次のユーティリティ関数を試してください。
// convert String date to another string date
public String convertStringDateToAnotherStringDate(String stringdate, String stringdateformat, String returndateformat){
try {
Date date = new SimpleDateFormat(stringdateformat).parse(stringdate);
String returndate = new SimpleDateFormat(returndateformat).format(date);
return returndate;
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "";
}
}
// call function with required parameter arguments
String resultDate = convertStringDateToAnotherStringDate("2017-06-22", "yyyy-MM-dd", "dd-MM-yyyy")
System.out.println(resultDate);
結果: 2017年2月6日
同じフォーマッターを使用して異なるフォーマットを処理している。
_2013-02-21
_を日付オブジェクトに変換するための2つのフォーマッターnew SimpleDateFormat("dd-MM-yyyy");
と、日付オブジェクトを文字列_21-02-2013
_にフォーマットするためのnew SimpleDateFormat("dd-MM-yyyy");
を提供する必要があります。
まず、Postgresデータベースから日付をString
として取得しないでください。日付を表す型のオブジェクトとして取得する必要があります。
第2に、2013年にはDate
とSimpleDateFormat
の使用は当たり前で合理的でしたが、日が過ぎ、新しくてより良い日付と時刻のクラスが登場し、一般的に使用されるようになりました。私見誰ももう古いクラスを使うべきではありません、そして私はそれらを長い間古くしていると思います。
データベースからLocalDate
からResultSet
オブジェクトを取得するには:
LocalDate da = yourResultSet.getObject(3, LocalDate.class);
(日付がクエリの列3にあると想定しています)。
dd-MM-yyyy
にフォーマットするには:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-uuuu");
String strDateTime = da.format(formatter);
System.out.println("==String date is : " + strDateTime);
これは次のような出力を与えます
==String date is : 21-02-2013
最後に、質問のような文字列があり、それを希望の形式に再フォーマットしたい場合:
String strDate = "2013-02-21";
LocalDate da = LocalDate.parse(strDate);
System.out.println("==Date is ==" + da);
これはプリント
==Date is ==2013-02-21
文字列が、現代の日付と時刻クラスのデフォルトであるISO 8601標準日付形式に一致するという事実を利用しています。したがって、この場合、他の形式を解析する場合のように、解析するための明示的なフォーマッターは必要ありません。
希望するフォーマットへのフォーマットは、以前とまったく同じように行われます。
私のコンピューターでは、質問のコードからの出力は
==Date is ==Tue Aug 06 00:00:00 CET 26
==String date is : 06-08-0026
あなたは明らかに間違った結果を得ており、何が間違っていたのか手掛かりを得ていません。 だったが間違っていたのは、データベースの日付文字列2013-02-21
をnew文字列dd-MM-yyyy
に対して意図したフォーマッタで解析していたことです。したがって、2013年2月21日のADとして解析されます。 2013年2月はありませんか?デフォルトの設定でSimpleDateFormat
を使用しても問題ありません。次の月と年までの日数を数え続けるだけで、5年半後の8月6日まで続きますが、それでも歴史の非常に早い段階です。
現代のクラスで同様にやってみると:
LocalDate.parse(strDate, formatter);
— Java.time.format.DateTimeParseException: Text '2013-02-21' could not be parsed at index 2
を取得します。これは、フォーマッターが2桁の日を示したため、2桁を解析した後、入力文字列にさらに桁があると、エラーとなり、そのように報告されます。私は、この動作がより正確で役立つと考えています。
SimpleDateFormat
インスタンスを使用して日付パターンを渡す必要があります。
現在のパターン:yyyy-MM-dd
必要なパターン:dd-MM-yyyy
次を試してください。必要な日付形式のパターンを生成します。
public class App {
public static void main(String[] args) {
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat format2 = new SimpleDateFormat("dd-MM-yyyy");
Date date = null;
try {
date = format1.parse("2013-02-21");
System.out.println(format1.format(date)); //current format: 2013-02-21
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(format2.format(date)); //the format that is needed : 21-02-2013
}
}