1

私はJAXBとjoda time 2.2を使用しています。Mysql から XML にデータをバックアップし、復元します。私のテーブルには、「16-Mar-05」の形式の日付属性があります。これをXMLに正常に保存しました。しかし、XML から読み取って Mysql テーブルに戻したい場合、正しい形式を取得できません。

これは私の XMLAdapter クラスです。ここでは非整列化メソッドで入力文字列は「16-Mar-05」ですが、パターンを「dd- MMM-yy」。試したすべてのオプションを投稿しましたが、16-Mar-05 形式のように「dd-MMM-yy」で localDate を取得するにはどうすればよいですか?

ありがとう!!

public class DateAdapter extends XmlAdapter<String, LocalDate> {

// the desired format
private String pattern = "dd-MMM-yy";

@Override
public String marshal(LocalDate date) throws Exception {
    //return new SimpleDateFormat(pattern).format(date);
    return date.toString("dd-MMM-yy");
}

@Override
public LocalDate unmarshal(String date) throws Exception {
    if (date == null) {
        return null;
    } else {
        //first way
        final DateTimeFormatter dtf = DateTimeFormat.forPattern("dd-MMM-yy");
        final LocalDate localDate2 = dtf.parseLocalDate(date);

        //second way
        LocalDate localDate3 = LocalDate.parse(date,DateTimeFormat.forPattern("dd-MMM-yy"));

        //third way
        DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("dd-MMM-yy");
        DateTime dateTime = FORMATTER.parseDateTime(date);
        LocalDate localDate4 = dateTime.toLocalDate();
        return localDate4;
    }
}
4

1 に答える 1

5

だから私はあなたのコードを取り、それを実行しました、そしてそれは私にとってはうまくいきます...

あなたが抱えている問題は、LocalDateオブジェクトが最初にオブジェクトを解析した形式を維持することを期待していることだと思います。これはどのようにLocalDate機能するかではありません。

LocalDateは日付または期間の表現であり、形式ではありません。

LocalDateオブジェクトの値をダンプするために使用できるメソッドがtoStringあります。これは、人間が読める表現を提供するためにオブジェクトによって使用される内部形式です。

日付をフォーマットするには、必要なパターンと日付値を取得して返すある種のフォーマッタを使用する必要がありますString

たとえば、次のコード...

SimpleDateFormat sdf = new SimpleDateFormat(pattern);
String date = "16-Mar-05";

DateTimeFormatter dtf = DateTimeFormat.forPattern("dd-MMM-yy");
LocalDate localDate2 = dtf.parseLocalDate(date);
System.out.println(localDate2 + "/" + dtf.print(localDate2));

//second way
LocalDate localDate3 = LocalDate.parse(date, DateTimeFormat.forPattern("dd-MMM-yy"));
System.out.println(localDate3 + "/" + dtf.print(localDate3));

//third way
DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("dd-MMM-yy");
DateTime dateTime = FORMATTER.parseDateTime(date);
LocalDate localDate4 = dateTime.toLocalDate();
System.out.println(localDate4 + "/" + FORMATTER.print(localDate4));

生産...

2005-03-16/16-Mar-05
2005-03-16/16-Mar-05
2005-03-16/16-Mar-05

これに腹を立てる前に、JavaDateも同様に動作します。

于 2013-07-10T01:18:43.263 に答える