【发布时间】:2021-06-15 17:35:37
【问题描述】:
我正在 Spock 中运行测试,尝试比较两个 OffsetDateTime 对象。测试与 H2 数据库集成。我的实体名为 Beacon,它具有 creation_time 属性。这是实体:
@Entity
@Table(name = "beacons")
@Getter
@Setter
public class Beacon {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
private OffsetDateTime creationTime;
}
然后,Spock 测试,我做以下事情:我创建新的 Beacon 对象:
def beacon = new Beacon(
id: id,
creationTime: OffsetDateTime.now()
)
然后我将 Beacon 对象保存在数据库中,我获取它并比较创建时间:
beaconRepository.save(beacon)
def savedBeacon = beaconRepository.findById(id)
beacon.getCreationTime() == savedBeacon.getCreationTime()
现在,在 Unix 和 MacOS 上一切正常,而在 Windows 上,此测试失败,因为 savedBeacon.getCreationTime() 返回的时间比 beacon.getCreationTime() 更精确。为什么会这样?当然,我知道几种解决方法,例如将creationTime定义为OffsetDateTime.now(Clock.tickMillis(ZoneId.systemDefault())),但有没有更好的解决方案?
【问题讨论】:
-
您的“解决方法”正是您应该这样做的。为什么你认为这不是一个足够好的解决方案?
-
我还以为是溢出了……
-
编辑您的问题以报告您的每台计算机上部署的 Java 版本:
System.getProperty("java.version")。并发布您找到的真实示例数据。