Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring 3.2 Date time format

Tags:

spring

I am using standalone Spring framework and I want to implement Spring 3.2 @DateTimeFormat(pattern = "dd/mm/yyyy"), but not getting the expected output.

My code snippet is:

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

Gives following result:

Mon Aug 30 15:08:14 CDT 1999 

but I was expecting output like: 30/08/1999

I want to implement without joda time library

like image 882
AKB Avatar asked Jul 19 '13 20:07

AKB


2 Answers

Try changing the format to :

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

MM is for months , mm for minutes .

Just look at this documentation:

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

like image 134
AllTooSir Avatar answered Sep 23 '22 19:09

AllTooSir


I know it's an old question but I answer because I had the same problem today and I lost 4 hours of work to find the solution. The problem here is spring uses Jackson to serialize and deserialize JSON. @DateTimeFormat annotation will not do the job, you have to tell Jackson how to serialize the date. You have two solutions: the first one is the simplier and is to use @JsonFormat annotation in the getter method:

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

The second solution is to create a custom serializer for date fields like this:

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

and then use the annotation in the get method:

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

this link explains how to do the serializer

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

I faced another problem, I was importing in my JsonDateSerializer class the classes from org.codehaus.jackson package, but Spring gived me this error:

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

So I changed all the imports to the package

com.fasterxml.jackson

and it all works fine. I hope it can help someone.

like image 14
amicoderozer Avatar answered Sep 21 '22 19:09

amicoderozer