Java日期格式化方案

53 篇文章 1 订阅

一、注解方式

@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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值