Java日期格式化方案

一、注解方式

@DateTimeFormat 和 @JsonFormat 是Java中用于格式化日期和时间的注解。它们的应用场景稍有不同,但是他们的目标是相同的,那就是改变日期和时间的显示格式。

@DateTimeFormat

@DateTimeFormat 是Spring Framework中的一个注解,主要用于将String类型的日期时间转换为Date或者DateTime类型。

@DateTimeFormat是Spring框架提供的注解,主要用于处理日期和时间的格式化与解析。它通常用在Spring MVC控制器的方法参数中,来绑定请求参数到日期类型,也可以用在响应模型的日期类型字段上,用于在视图渲染时的格式化。

这个注解有一些属性,例如iso(使用ISO日期时间格式)和pattern(自定义日期时间格式字符串)。这在处理HTTP请求参数时特别有用, 例如:

public class Event {
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
    private LocalDate date;
    //...
}

在这个例子中,date字段期望一个ISO 8601日期格式的字符串,如"2023-08-01"。如果请求中的参数与这个格式不符,那么Spring将抛出一个异常。

以下是另外一些用法的例子:

// 请求参数格式化
@RequestMapping(value = "/date")
public String getDate(@DateTimeFormat(pattern = "yyyy-MM-dd") Date date) {
    // ...
}

// 响应模型格式化
public class MyModel {
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date myDate;
    // ...
}

@JsonFormat

@JsonFormat 是Jackson库中的一个注解,用于定制Java对象序列化(转化为JSON)或反序列化(从JSON转化为Java对象)时的日期格式化。这在处理JSON数据时特别有用。例如:

public class Event {
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
    private Date date;
    //...
}

在这个例子中,当date字段被序列化为JSON时,它将被格式化为"yyyy-MM-dd"格式的字符串,如"2023-08-01"。反过来,如果输入的JSON数据中的日期字段与这个格式不符,那么Jackson将抛出一个异常。

注意:这两个注解的工作原理都是基于Java的java.text.SimpleDateFormat类,因此你可以在它们的pattern属性中使用任何有效的日期和时间格式模式。

@JsonFormat的主要属性不仅包括pattern(日期时间格式字符串),还包含timezone(时区)。

以下是另外一些用法的例子:

public class MyModel {
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date myDate;
    // ...
}

总的来说,@DateTimeFormat更侧重于Spring MVC的请求/响应模型绑定和视图渲染,而@JsonFormat主要用于Jackson的JSON序列化和反序列化。

二、配置文件

(1)application.properties

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8

(2)application.yml

spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
        time-zone: GMT+8

你可能感兴趣的:(后端,后端,java)