如何为 Hibernate Envers 修订信息保存 UTC(而不是本地)时间戳?

How to save UTC (instead of local) timestamps for Hibernate Envers revision info?

使用 Hibernate/Envers,如何:

  1. 为 Hibernate Envers 修订信息保存 UTC(而不是本地)时间戳?
  2. 获取时间戳作为 LocalDateTime (Java 8)?

1) 从修订监听器中,调用修订的fixTimezone方法,如下所示。

2) 要将其作为 LocalDateTime 使用 getRevisionDate 方法,如下所示。

public class MyRevisionListener
    implements RevisionListener {

    @Override
    public void newRevision(Object revisionEntity) {
        MyRevision revision = (MyRevision)revisionEntity;
        revision.fixTimezone();
        }
    }

@Entity
@RevisionEntity (MyRevisionListener.class)
public class MyRevision
      implements Serializable {

    @Id
    @GeneratedValue
    @RevisionNumber
    private long id;

    @RevisionTimestamp
    @Temporal (TemporalType.TIMESTAMP)
    @Column (nullable = false)
    private Date date;

    private static final ZoneId ZONE_ID_UTC = ZoneId.of("UTC");

    public void fixTimezone() {
        LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZONE_ID_UTC);
        date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
        }

    @NotNull
    public LocalDateTime getRevisionDate() {
        return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
        }

    ...
    }

相关的 Hibernate 问题: