前后端时间处理

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

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;
}

♥️ 获取支持

遇到问题?

如果您在使用过程中遇到任何问题、有功能建议或需求,请点击此卡片前往 Gitee 仓库提交 Issue。