美文网首页
【Java后端】日期处理约定

【Java后端】日期处理约定

作者: iakuil | 来源:发表于2022-06-16 15:59 被阅读0次

Java日期处理最能体现团队成熟度,之前有那么个项目,有的童鞋用Date,有的用LocalDateTime,还有的用Long,有的直接用String,真是百花齐放,百鸟争鸣,百思不得其解啊~~
所以有必要从前后端接口角度约定以下日期处理方式。

大家都知道,Date/LocalDateTime序列化成JSON时默认使用国际标准时间格式(ISO8601),对于开发者不是特别友好,现全局统一配置日期格式如下:

对象 Date LocalDateTime LocalDate LocalTime
格式 yyyy-MM-dd HH:mm:ss yyyy-MM-dd HH:mm:ss yyyy-MM-dd HH:mm:ss

Long类型表示日期一般出现在OpenAPI,故不做推荐。

例1. Date对象序列化:

@GetMapping(value = "/now")
public Date getTimestamp() {
        return new Date();
}

请求:

curl http://localhost:8080/now

响应:2020-02-21 12:15:45

例2. LocalDateTime作为入参(Path):

@GetMapping(value = "/hello/{someDate}")
public LocalDateTime getTimestamp(@PathVariable LocalDateTime someDate) {
        return someDate;
}

请求:

curl http://localhost:8080/hello/2020-02-21+12%3a15%3a45

响应:2020-02-21 12:15:45

例3. LocalDateTime作为入参(Query):

@GetMapping(value = "/hello/")
public LocalDate getTimestamp(@RequestParam LocalDate someDate) {
        return someDate;
}

请求:

curl http://localhost:8080/helloTime/?someDate=2020-02-21

响应:2020-02-21

例4. LocalDateTime作为Path Query:

@GetMapping(value = "/hello/")
public Date getTimestamp(@DateTimeFormat(pattern = "yyyy-MM-dd") @RequestParam Date someDate) {
        return someDate;
}

请求:

curl http://localhost:8080/helloTime/?someDate=2020-02-21

响应:2020-02-21 00:00:00

例5. Date对象作为属性序列化:


@Data
public class Student {
    private Long id;

    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date birthday;

    private LocalDateTime createTime;
}

序列化后:

{
  "id": "9223372036804940651",
  "birthday": "2009-03-08",
  "createTime": "2019-07-10 13:40:06"
}

注意:JSON序列化时,@DateTimeFormat注解换成了@JsonFormat。

BTW,id字段是Long类型,可能存在精度丢失,因此全局转为字符串。

4. 开始日期和结束日期的处理

时间范围参数可以还可以使用自定义注释@StartDate和@EndDate,前者精确到00:00:00:000,后者精确到23:59:59:999。
可以用在JSON反序列化:


public class SomeQueryParam {
    @StartDate
    private Date since;

    @EndDate
    private Date until;
}

示例:

  • {"since": "2020-10-01","until": "2020-10-07"},表示:2020年10月1日零点到2020年10月7日23点59分59秒之间的时间段,也就是2020年国庆假期。
  • {"since": "2021-11-11","until": "2021-11-11"},表示:2021年11月11日零点到2018年11月7日23点59分59秒之间的时间段,2021年双十一当天的意思。

也可以直接用于接口入参:

  public void initData(@StartDate @RequestParam Date since, @EndDate @RequestParam Date until);

👉最后推荐两个日期处理工具类:

  • Apache Commons中的DateUtils
  • hutool中的DateUtil

--- THE END---

相关文章

  • 【Java后端】日期处理约定

    Java日期处理最能体现团队成熟度,之前有那么个项目,有的童鞋用Date,有的用LocalDateTime,还有的...

  • 在java Web项目中处理前后端日期字段自动匹配绑定

    在java开发中,经常会遇到前后端交互日期格式,一般我们都会用日期格式化来处理,但时间久了,你是否感觉到繁琐而且冗...

  • CKEditor5图片上传后台

    后端单张图片处理 deals-java.jpg 图片处理 返回字符串处理

  • java日期处理

    java日期 java日期时间处理,主要是三个类Date(日期)、Calendar(日历)、DateFormat(...

  • JAVA日期处理

    java.util.Calendar 针对日期的操作 java.text.SimpleDateFormat 针对日...

  • java 日期处理

    结果: 当前时间=2017-04-28一周前=2017-04-212018-04-21两天前=2018-04-19...

  • 【Java】日期处理

    需求 做报表统计时需要按年、月、日三个范围进行统计,后端从前端获取一个时间戳,然后根据范围得到两个时间戳(日的话就...

  • Java日期处理

    1. 日期时间 1.1 TimeZone 时区 格林威治标准时间 GMT+08:00 UTC+08:00 夏令时 ...

  • 聊聊java的日期处理类

    java里面常用的日期处理类: java里面常用的日期处理类主要有: Date Calendar TimeZone...

  • java时间日期总结

    java时间日期总结 [TOC] Java早期的时间API Date Date既能处理时间,又能处理日期,虽然如此...

网友评论

      本文标题:【Java后端】日期处理约定

      本文链接:https://www.haomeiwen.com/subject/xbdqvrtx.html