2013-07-19 41 views
8

私はスタンドアロンSpringフレームワークを使用していますが、Spring 3.2 @DateTimeFormat(pattern = "dd/mm/yyyy")を実装したいが、期待される出力を得られません。Spring 3.2日付時刻フォーマット

私のコードスニペットは、次のとおりです。

Mon Aug 30 15:08:14 CDT 1999 

が、私は次のように出力を期待していた:30/08/1999

私はジョダ時間なしで実装したい

@DateTimeFormat(pattern = "dd/mm/yyyy") 
     private Date dob; 


    public void amehotd(){ 

    Calendar cal; 
     cal = Calendar.getInstance(); 
      cal.set (1999, Calendar.AUGUST, 30); 
      this.dob = cal.getTime(); 
      System.out.println(dob)  
    } 

は、次のような結果になりますライブラリ

+0

どのように出力しますか?アノテーションが考慮されていないように見えるので、私は尋ねます。 – Ralph

+0

私は[Joda-time](http://joda-time.sourceforge.net/)API(いつも私の好みである)を使用し、Java SEのデフォルト日付時刻APIは使用しません。 Spring 3.2を使用している場合、カスタムプロパティエディタを['@ ControllerAdvice'](http://static.springsource.org/spring/docs/3.2.x/javadoc-api/org/springframework)で直接登録することができます/web/bind/annotation/ControllerAdvice.html)を使用して、必要なものを満たしてください。 – Lion

答えて

15

フォーマットを次のように変更してみてください。

@DateTimeFormat(pattern = "dd/MM/yyyy") 

MMは、分の場合はmmです。

はちょうどこのdocumentationを見て:あなたは、あなたのクラスのメソッドに直接System.out.printlnを呼び出している

The most common ISO DateTime Format yyyy-MM-dd'T'hh:mm:ss.SSSZ e.g.

+3

@DateTimeFormat(パターン= "dd/MM/yyyy") \tプライベート日付dob;しかし、まだ取得:Mon Aug 30 30:28:22 CDT 1999 – bekur

1

。これはそのようには機能しません。

dobフィールドは、クラスの外から、たとえばJSPページから呼び出す必要があります。そして、この方法では、フィールドは自動的に与えられたパターンにフォーマットされます。

0

@NumberFormatアノテーションと@DateTimeFormatアノテーションは、Spring MVC環境でのみ動作します。あなたのxml mvc構成ファイルで<mvc:annotation-driven/> を使用する必要があります。

0

あなたのクラスであなたの輸入品を見てください。あなたの日付タイプはjava.util.Dateでなければなりません。 java.sql.Dateなど、別のクラスから継承している可能性があります。

5

私はそれが古い問題だと知っていますが、私は今日同じ問題を抱えていて、解決策を見つけるのに4時間の仕事を失ったので答えます。ここでの問題は、JSONを直列化および逆シリアル化するためにspringをjacksonで使用することです。 @DateTimeFormat注釈は仕事をしません、あなたはジャクソンに日付をシリアル化する方法を教えなければなりません。次の2つのソリューションを持っている:最初のものはsimplierで、getterメソッドで@JsonFormatアノテーションを使用することです:

@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="dd/MM/yyyy") 
public Date getDob(){ 
    return dob; 
} 

第二の溶液は、このような日付フィールドのためのカスタム・シリアライザを作成することです:

public class JsonDateSerializer extends JsonSerializer<Date>{ 

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 

    @Override 
    public void serialize(Date date, JsonGenerator gen, SerializerProvider provider) 
      throws IOException, JsonProcessingException { 

     String formattedDate = dateFormat.format(date); 

     gen.writeString(formattedDate); 
    } 
} 

、その後は、getメソッドにアノテーションを使用:

@JsonSerialize(using=JsonDateSerializer.class) 
public Date getDob(){ 
    return dob; 
} 

このリンクは、シリアライザを行う方法について説明し

https://dzone.com/articles/how-serialize-javautildate

私は私がorg.codehaus.jacksonパッケージから私のJsonDateSerializerクラスのクラスをインポートしましたが、春は私にこのエラーをgived、別の問題に直面した:

java.io.FileNotFoundException: class path resource [org/codehaus/jackson/map/JsonSerializer.class] cannot be opened because it does not exist 

だから私はパッケージにすべての輸入を変更

com.fasterxml.jackson 

すべて正常です。 私はそれが誰かを助けることを願っています。

関連する問題