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