Spring 3。3日期时间格式

时间:2013-07-19 20:23:06

标签: spring

我正在使用独立的Spring框架,我想实现Spring 3.2 @DateTimeFormat(pattern =“dd / mm / yyyy”),但没有获得预期的输出。

我的代码段是:

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

给出以下结果:

Mon Aug 30 15:08:14 CDT 1999 

但我期待输出如:30/08/1999

我想在没有joda时间库的情况下实现

5 个答案:

答案 0 :(得分:19)

尝试将格式更改为:

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

MM数月,mm分钟。

请看这个documentation

  

最常见的ISO日期时间格式 yyyy-MM-dd'T'hh:mm:ss.SSSZ ,例如

答案 1 :(得分:8)

我知道这是一个老问题,但我回答是因为我今天遇到了同样的问题而且我失去了4个小时的工作来找到解决方案。这里的问题是Spring使用Jackson来序列化和反序列化JSON。 @DateTimeFormat注释不能完成这项工作,你必须告诉杰克逊如何序列化日期。您有两个解决方案:第一个是更简单的解决方案,并且在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

我遇到了另一个问题,我在JsonDateSerializer类中导入org.codehaus.jackson包中的类,但Spring给了我这个错误:

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

所以我将所有导入更改为包

com.fasterxml.jackson

一切正常。 我希望它可以帮助别人。

答案 2 :(得分:1)

您是在班级的方法中直接致电System.out.println。这不可能那样。

您必须从类外部调用dob字段,例如从JSP页面调用。这样,该字段将自动格式化为给定的模式。

答案 3 :(得分:0)

@NumberFormat和@DateTimeFormat注释仅适用于Spring MVC环境。你必须使用<mvc:annotation-driven/> 在你的xml mvc配置文件中。

答案 4 :(得分:0)

查看班级中的导入内容。您的日期类型应为java.util.Date。它可能是从不同的类继承的,例如java.sql.Date。