2013-07-19 14 views
8

Utilizzo il framework Spring autonomo e voglio implementare Spring 3.2 @DateTimeFormat (pattern = "gg/mm/aaaa"), ma non ottenere l'output previsto.Spring 3.2 Formato ora data

codice mio frammento è:

@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)  
    } 

Dà seguente risultato:

Mon Aug 30 15:08:14 CDT 1999 

ma mi aspettavo di uscita come: 30/08/1999

voglio attuare senza tempo joda libreria

+0

Come si "stampa" quell'output? Chiedo perché sembra che l'annotazione non sia stata presa in considerazione. – Ralph

+0

Vorrei utilizzare l'API [Joda-time] (http://joda-time.sourceforge.net/) (poiché è sempre la mia preferenza) e certamente non le API di data e ora predefinite di Java SE. Se utilizzi Spring 3.2, puoi registrare un editor di proprietà personalizzato direttamente con ['@ ControllerAdvice'] (http://static.springsource.org/spring/docs/3.2.x/javadoc-api/org/springframework /web/bind/annotation/ControllerAdvice.html) per soddisfare qualsiasi esigenza. – Lion

risposta

15

Provare a modificare il formato in:

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

MM è per mesi, mm per minuti.

Basta guardare questa documentation:

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

+3

@DateTimeFormat (pattern = "gg/MM/aaaa") \t private Data dob; ma ancora ottenendo: Mon Aug 30 15:28:22 CDT 1999 – bekur

1

Si sta chiamando System.out.println direttamente in un metodo della classe. Questo non può funzionare in questo modo.

È necessario chiamare il campo dob dall'esterno della classe, ad esempio da una pagina JSP. In questo modo, il campo verrà automaticamente formattato secondo lo schema specificato.

0

Le annotazioni @NumberFormat e @DateTimeFormat funzionano solo nell'ambiente MVC di Spring. Devi usare <mvc:annotation-driven/> nel tuo file di configurazione mvc xml.

0

Dai un'occhiata alle tue importazioni nella tua classe. Il tuo tipo di data dovrebbe essere java.util.Date. Potrebbe ereditare da una classe diversa, ad esempio, java.sql.Date.

5

So che è una vecchia domanda ma rispondo perché ho avuto lo stesso problema oggi e ho perso 4 ore di lavoro per trovare la soluzione. Il problema qui è la primavera usa Jackson per serializzare e deserializzare JSON. L'annotazione @DateTimeFormat non farà il lavoro, devi dire a Jackson come serializzare la data.Avete due soluzioni: la prima è la più semplice ed è quello di utilizzare @JsonFormat annotazioni nel metodo getter:

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

La seconda soluzione è quella di creare un serializzatore personalizzato per i campi data così:

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); 
    } 
} 

e quindi utilizzare l'annotazione nel metodo get:

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

questo link spiega come fare il serializzatore

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

ho affrontato un altro problema, mi importava nella mia classe JsonDateSerializer le classi da org.codehaus.jackson pacchetto, ma la primavera mi gived questo errore:

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

Così ho cambiato tutte le importazioni al pacchetto

com.fasterxml.jackson 

e tutto funziona correttamente. Spero possa aiutare qualcuno.