带有 LocalDateTime 的 SpringBoot2 @DateTimeFormat 注释不能按我的预期工作

Posted

技术标签:

【中文标题】带有 LocalDateTime 的 SpringBoot2 @DateTimeFormat 注释不能按我的预期工作【英文标题】:SpringBoot2 @DateTimeFormat annotation with LocalDateTime doesn't work as i expected 【发布时间】:2019-12-18 01:25:12 【问题描述】:

我想用@DateTimeFormatLocalDateTime 转换为YYYY-MM-DD HH:mm:ss 格式。

以下是我的源代码。

实体类
@Entity // JPA Annotation
@Setter // Lombok Annotations
@Getter
public class CustomModel 
    @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
    private LocalDateTime addDate;

    @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
    private LocalDateTime lastModifyDate;

控制器类
...
CustomModel customModel = new CustomModel();
customModel.setAddDate(LocalDateTime.now());
customModel.setLastModifyDate(LocalDateTime.now());
...

以下是结果。

在上图中,我预计是“2019-08-11 03:08:56”。

但结果格式是 '2019-08-11 03:08:56.814944'。

怎么了??

【问题讨论】:

能否分享一下您在数据库中用于此 add_date 列的列类型? 哪里有问题?? (您的帖子(代码)中没有单个字符串(格式模式除外)) 它关于数据库列类型,您的 add_date 类型是什么以及使用哪个数据库? 【参考方案1】:

您可以使用 DateTimeFormatter 类。但是要转换,您需要日期的字符串表示形式。然后解析它。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

customModel.setAddDate(LocalDateTime.parse(LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME)), formatter);
customModel.setLastModifyDate(LocalDateTime.parse(LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME)), formatter);

【讨论】:

【参考方案2】:

你没有放百里香模板,但是@DateTimeFormat注解只有在你使用双括号而不是单括号时才会被考虑,即$model.addDate而不是$model.addDate

【讨论】:

以上是关于带有 LocalDateTime 的 SpringBoot2 @DateTimeFormat 注释不能按我的预期工作的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 1.4:LocalDateTime 映射到 varbinary 而不是时间戳类型

在 Spring Boot 和 ElasticSearch 中使用 Instant、LocalDateTime 和 ZonedDateTime

spring-rest接口LocalDateTime转时间戳

spring-rest接口LocalDateTime转时间戳

spring-rest接口LocalDateTime转时间戳

Spring boot + Jackson + LocalDateTime:日期解析不正确