前后端时间处理
pig 项目使用的 Jackson 作为输入输出格式处理, 全局 PigJavaTimeModule
定义了 可以自动 字符串 <—> 日期时间 转换的规则。 下文将详细讲解及其其他类型如何转换配置。
public class PigJavaTimeModule extends SimpleModule {
public PigJavaTimeModule() {
super(PackageVersion.VERSION);
this.addSerializer(LocalDateTime.class,
new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
this.addSerializer(LocalDate.class,
new LocalDateSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));
this.addSerializer(LocalTime.class,
new LocalTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));
this.addDeserializer(LocalDateTime.class,
new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
this.addDeserializer(LocalDate.class,
new LocalDateDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));
this.addDeserializer(LocalTime.class,
new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));
}
}
前端传参 String 后端反序列成 Date 对象
pig 的日期时间类型均使用 Java8 的日期时间对象, LocalDateTime、LocalDate、LocalTime。
若前端上送时间字符串为以下类型,则后端对应的类型 则可以自动转换。
- “yyyy-MM-dd HH:mm:ss” —> LocalDateTime
- “yyyy-MM-dd” —> LocalDate
- “HH:mm:ss” —> LocalTime
个性化字符串 转换
- 方式一: 前端转换 | 若使用 element、avue 等均有此属性对提交的值进行格式化,只要格式化成如上格式即可。
- 方式二: 后端转换 | 总有些场景上送的日期参数是没有方法通过前端格式化(比如其他第三方上送的报文)此时需要在后端进行格式化。
// 前端上送 2020年10月10日11时17分31秒
@Data
public class DemoDTO {
@DateTimeFormat(pattern = "yyyy年MM月dd日HH时mm分ss秒")
private LocalDateTime fieldName;
}
后端序列化 Date 输出 Json 日期格式
默认输出格式
- LocalDateTime —> “yyyy-MM-dd HH:mm:ss”
- LocalDate —> “yyyy-MM-dd”
- LocalTime —> “HH:mm:ss”
个性化输出
@Data
public class DemoDTO {
@JsonFormat(pattern = "yyyy年MM月dd日HH时mm分ss秒")
private LocalDateTime fieldName;
}