前后端时间处理

pig 项目使用的 Jackson 作为输入输出格式处理, 全局 PigJavaTimeModule 定义了 可以自动 字符串 <—> 日期时间 转换的规则。 下文将详细讲解及其其他类型如何转换配置。

  1. public class PigJavaTimeModule extends SimpleModule {
  2. public PigJavaTimeModule() {
  3. super(PackageVersion.VERSION);
  4. this.addSerializer(LocalDateTime.class,
  5. new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
  6. this.addSerializer(LocalDate.class,
  7. new LocalDateSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));
  8. this.addSerializer(LocalTime.class,
  9. new LocalTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));
  10. this.addDeserializer(LocalDateTime.class,
  11. new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
  12. this.addDeserializer(LocalDate.class,
  13. new LocalDateDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));
  14. this.addDeserializer(LocalTime.class,
  15. new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));
  16. }
  17. }

前端传参 String 后端反序列成 Date 对象

pig 的日期时间类型均使用 Java8 的日期时间对象, LocalDateTime、LocalDate、LocalTime。

若前端上送时间字符串为以下类型,则后端对应的类型 则可以自动转换。

  • “yyyy-MM-dd HH:mm:ss” —> LocalDateTime
  • “yyyy-MM-dd” —> LocalDate
  • “HH:mm:ss” —> LocalTime

个性化字符串 转换

  • 方式一: 前端转换 | 若使用 element、avue 等均有此属性对提交的值进行格式化,只要格式化成如上格式即可。

时间转换处理及个性化 - 图1

  • 方式二: 后端转换 | 总有些场景上送的日期参数是没有方法通过前端格式化(比如其他第三方上送的报文)此时需要在后端进行格式化。
  1. // 前端上送 2020年10月10日11时17分31秒
  2. @Data
  3. public class DemoDTO {
  4. @DateTimeFormat(pattern = "yyyy年MM月dd日HH时mm分ss秒")
  5. private LocalDateTime fieldName;
  6. }

后端序列化 Date 输出 Json 日期格式

默认输出格式

  • LocalDateTime —> “yyyy-MM-dd HH:mm:ss”
  • LocalDate —> “yyyy-MM-dd”
  • LocalTime —> “HH:mm:ss”

个性化输出

  1. @Data
  2. public class DemoDTO {
  3. @JsonFormat(pattern = "yyyy年MM月dd日HH时mm分ss秒")
  4. private LocalDateTime fieldName;
  5. }

❤ 问题咨询

手势点击蓝字求关注简约风动态引导关注__2022-09-07+23_18_38.gif