【问题标题】:Spring 3.2 Date time formatSpring 3.2 日期时间格式
【发布时间】:2013-07-19 06:08:58
【问题描述】:

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

我的代码 sn-p 是:

    @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 时间库的情况下实现

【问题讨论】:

  • 如何“打印”该输出?我问是因为看起来根本没有考虑注释。
  • 我会使用Joda-time API(因为它始终是我的偏好),当然不会使用 Java SE 默认的日期时间 API。如果您使用的是 Spring 3.2,那么您可以直接向 @ControllerAdvice 注册一个自定义属性编辑器,以满足您的任何需求。

标签: spring


【解决方案1】:

我知道这是一个老问题,但我之所以回答是因为我今天遇到了同样的问题,而且我浪费了 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】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          尝试将格式更改为:

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

          MM 是几个月,mm 是几分钟。

          看看这个documentation

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

          【讨论】:

          • @DateTimeFormat(pattern = "dd/MM/yyyy") 私人日期出生日期;但仍然得到:1999 年 8 月 30 日星期一 15:28:22 CDT
          猜你喜欢
          • 2021-10-23
          • 2019-08-10
          • 1970-01-01
          • 2013-04-23
          • 1970-01-01
          • 2020-11-20
          • 1970-01-01
          相关资源
          最近更新 更多