19

私はJavaを初めて使用します。Postgresデータベースには日付形式が含まれています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);
}
4

8 に答える 8

55
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));
于 2013-02-21T10:12:17.453 に答える
11

DateFormat2つのインスタンスを使用する必要があります。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);
}
于 2013-02-21T10:10:56.317 に答える
5

これらの形式を参照してくださいJava日付形式ドキュメント

日時の形式

このコードを試してください:

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));
于 2013-02-21T10:19:43.713 に答える
2

現在の状態を解析するためのフォーマットと、目的の出力を生成するためのフォーマットが必要です。

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)));
于 2013-02-21T10:13:25.920 に答える
2

次のユーティリティ機能を試してください。

// 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年6月22日

于 2017-06-22T14:59:12.320 に答える
0

同じフォーマッタを使用して異なるフォーマットを処理しています。

日付オブジェクトnew SimpleDateFormat("dd-MM-yyyy");に変換するためと、日付オブジェクトを文字列にフォーマットするために、2つのフォーマッタを提供する必要があります。2013-02-21new SimpleDateFormat("dd-MM-yyyy");21-02-2013

于 2013-02-21T10:13:47.677 に答える
0

Stringまず、 Postgresデータベースから日付を取得するべきではありません。日付を表すタイプのオブジェクトとして取得する必要があります。

第二に、2013年には、一般的で合理的な使用でしDateSimpleDateFormatが、日が経ち、新しくより良い日付と時刻のクラスが出てきて、一般的に使用されるようになりました。私見では、古いクラスはもう使用すべきではなく、古くからあると思います。

データベースから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

文字列が、最新の日付と時刻のクラスのデフォルトであるISO8601標準の日付形式と一致するという事実を利用しています。したがって、この場合、他の形式を解析する場合のように、解析に明示的なフォーマッターは必要ありません。

希望のフォーマットへのフォーマットは、以前とまったく同じように行われます。

古いクラスの問題の例

私のコンピューターでは、質問のコードからの出力は次のとおりです。

==Date is ==Tue Aug 06 00:00:00 CET 26
==String date is : 06-08-0026

あなたは明らかに間違った結果を得ており、何が間違っていたのか見当がつかない。間違っていたのは、db日付文字列を、新しい文字列用に意図したフォーマッタで解析してこと2013-02-21です。したがって、2013年2月21日ADとして解析されます。2013年2月はありませんか?デフォルト設定では問題ありません。次の月と年に日数をカウントし続け、5年半後の8月6日に終了しますが、それでも歴史の非常に早い段階です。dd-MM-yyyySimpleDateFormat

現代のクラスで同じようにしようとすると:

    LocalDate.parse(strDate, formatter);

—取得しjava.time.format.DateTimeParseException: Text '2013-02-21' could not be parsed at index 2ます。これは、フォーマッタが2桁の日を示していたため、2桁を解析した後、入力文字列にさらに桁が含まれている場合、エラーであり、そのように報告されます。私はこの振る舞いがより正確でより役立つと思います。

于 2017-06-30T15:52:19.357 に答える
0

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
    }
}
于 2018-07-07T07:48:23.640 に答える