java 限制日期格式_JDK8 日期格式化

JDK8 日期格式化

为什么要格式化

我们中国人习惯 yyyy-MM-dd HH:mm:ss 这种格式的日期,但奈何框架是歪国大佬们写的,他们的日期格式与我们相差甚远,好在 Spring Boot 提供了 spring.jackson.date-format,但它只能格式化 java.util.Date。那么解决办法是什么呢?

在 JDK8 中,一个新的重要特性就是引入了全新的时间和日期API,它被收录在 java.time 包中。借助新的时间和日期API可以以更简洁的方法处理时间和日期。

在 JDK8 之前,关于时间和日期的API存在以下几个缺陷,也正是这些缺陷,出现了很多第三方的日期处理框架,例如 Joda-Time,date4j 等开源项目。但是,Java 需要一套标准的用于处理时间和日期的框架,于是乎在 JDK8中引入了新的日期API。遵循 JSR-310 规范的实现,而 Joda-Time 框架的作者正是 JSR-310 的规范的倡导者,所以用过 Joda-Time 的对新日期API也不会陌生。为什么要用新的日期类型1、之前的 java.util.Date 和 java.util.Calendar 类易用性差,不支持时区,且非线程安全的;

2、日期格式化类 java.text.DateFormat 是一个抽象类,使用时需要先实例化一个 SimpleDateFormat 对象来处理日期格式化,同时 DateFormat 也不是线程安全的,这意味着如果你在多线程程序中调用同一个 DateFormat 对象,会得到意想不到的结果。

3、对日期的计算方式繁琐,而且容易出错,因为月份是从0开始的,从 Calendar 中获取的月份需要加一才能表示当前月份。

在Springboot中如何使用

1、导入依赖

org.springframework.boot

spring-boot-starter-web

2、配置文件

第一种方法

只需要定义一个配置类,在里面定义两个 Bean 即可完成全局日期格式化处理package com.jiuyue.config;

import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import java.time.LocalDateTime;

import java.time.format.DateTimeFormatter;

@Configuration

public class LocalDateTimeSerializerConfig {

@Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")

private String pattern;

@Bean

public LocalDateTimeSerializer localDateTimeDeserializer() {

return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern));

}

@Bean

public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {

return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer());

}

}

public class Order {

@JsonFormat(pattern = "yyyy-MM-dd")

private LocalDateTime payTime;

// 省略 GET SET ...

}

第二种方法(强烈推荐)

有时候,我们对日期格式要做特殊的处理,全局的格式化方式无法满足我们需求是,使用该方案是非常好的选择,通过 @JsonFormat 注解我们可以更为精准的为日期字段格式化,它也是优先级最高的public class Order {

@JsonFormat(pattern = "yyyy-MM-dd")

private LocalDateTime payTime;

// 省略 GET SET ...

}

控制层package com.jiuyue.controller;

import com.jiuyue.pojo.Order;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;

@RestController

@RequestMapping("/orders")

public class OrderController {

@GetMapping

public Order query() {

Order order = new Order();

order.setPayTime(LocalDateTime.now());

return order;

}

}

“关注我的微信公众号,一起进步“

9fb76f5a668e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值