10

我正在使用独立的 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 时间库的情况下实现

4

5 回答 5

21

尝试将格式更改为:

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

MM是几个月,mm几分钟。

看看这个文档

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

于 2013-07-19T20:24:23.850 回答
13

我知道这是一个老问题,但我回答是因为我今天遇到了同样的问题,我浪费了 4 个小时的工作来寻找解决方案。这里的问题是 spring 使用 Jackson 来序列化和反序列化 JSON。@DateTimeFormat注释不起作用,您必须告诉杰克逊如何序列化日期。您有两个解决方案:第一个更简单,@JsonFormat在 getter 方法中使用注释:

@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

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

于 2016-07-04T14:03:32.083 回答
1

System.out.println您直接在您的类的方法中调用。这不能那样工作。

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

于 2013-07-20T18:29:39.740 回答
0

看看你在课堂上的导入。您的日期类型应该是 java.util.Date。它可能继承自不同的类,例如 java.sql.Date。

于 2015-10-04T19:04:52.853 回答
0

@NumberFormat 和 @DateTimeFormat 注解仅在 Spring MVC 环境中有效。您必须<mvc:annotation-driven/> 在您的 xml mvc 配置文件中使用。

于 2015-08-04T04:20:19.290 回答