【问题标题】:Date format in saved and returned entity (Spring-Data)保存和返回实体中的日期格式(Spring-Data)
【发布时间】:2016-12-21 12:50:15
【问题描述】:

当我在存储库 personRepository.save(person) 中保存实体时,此返回的对象的日期格式如下:2016 年 12 月 21 日星期三 13:38:00 CET 2016。我如何将其更改为如下格式:2016- 12-21 13:38:00.732?这种转换在哪里完成,如何改变?在我的数据库中,日期以这种格式保存:2016-12-21 13:38:00.732。

    @Entity
public class Person {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "update_date")
    private java.util.Date updateDate;

public interface PersonRepository extends CrudRepository<Person, Long>  {}

【问题讨论】:

  • "我的数据库日期以这种格式保存:2016-12-21 13:38:00.732"。不正确。您用来查看数据库的工具以该格式显示它。日期就是日期。 2016 年 12 月 21 日星期三 13:38:00 CET 是调用 toString() 的结果。要以给定格式显示它,请使用适合您目的的格式化程序。
  • 该工具是 Eclipse 中实体中字段 java.util.Date 的调试器。我有另一个 dao 类(条件查询),我在其中得到这个实体(相同的实体)并且格式为 2016-12-21 13:38:00.732
  • 您可以使用各种不同的解决方案以各种不同的格式打印日期,具体取决于您要写入的位置。在标准 Java API 中,您可以使用 docs.oracle.com/javase/7/docs/api/java/text/… 的实例以特定格式打印日期。
  • 奇怪的是,在同一个实体中调用toString,对于相同类型的字段,根据使用的存储库不同的格式显示日期

标签: spring-boot orm spring-data


【解决方案1】:

您应该使用“org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime”。首先,你改变你的person实体

@Entity
public class Person {    

    @Column(name = "update_date")
    @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime")
    private LocalDateTime updateDate;

}

然后,在 PersonalImpl 之类的地方更新日期时间

     import org.joda.time.LocalDateTime;

     Class PersonalImpl {

        void updatePerson(...){
            Person person = new Person();
            //do update person data
            person.setUpdateDate(LocalDateTime.now());
        }

    }

PostgreSQL 9.5 显示数据库 2014-09-10 07:59:14.822

【讨论】:

  • 为什么?他究竟为什么要使用它?
  • 嗨 Alan Hay,我只是建议他使用它来进一步格式化日期时间。那么如果我们加载人员信息(例如用于 API)。
  • 然后,我们将覆盖任何格式的 JsonDeserializer 或 JsonSerializer org.joda.time.DateTime
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-26
  • 2019-09-30
  • 2018-05-20
  • 2019-11-08
  • 1970-01-01
  • 1970-01-01
  • 2022-08-08
相关资源
最近更新 更多