如何为 Hibernate Envers 修订信息保存 UTC(而不是本地)时间戳?
How to save UTC (instead of local) timestamps for Hibernate Envers revision info?
使用 Hibernate/Envers,如何:
- 为 Hibernate Envers 修订信息保存 UTC(而不是本地)时间戳?
- 获取时间戳作为 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 问题:
使用 Hibernate/Envers,如何:
- 为 Hibernate Envers 修订信息保存 UTC(而不是本地)时间戳?
- 获取时间戳作为 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 问题: