Java DBUnit数据集-插入UTC时间戳
假设我们有一个简单的单元测试数据集:Java DBUnit数据集-插入UTC时间戳,java,jpa,h2,dbunit,Java,Jpa,H2,Dbunit,假设我们有一个简单的单元测试数据集: <?xml version="1.0" encoding="UTF-8"?> <dataset> <my_entity id="1" start_date="2020-10-18 17:00:00 +0000" /> </dataset> 其中start\u date映射到实体对
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<my_entity
id="1"
start_date="2020-10-18 17:00:00 +0000"
/>
</dataset>
其中start\u date
映射到实体对象中的Instant
字段,以及数据库中的TIMESTAMP
列(h2-用于测试)
问题是:这不会导致UTC时间戳“2020-10-18T17:00:00Z”被放入测试数据库!
最后出现的是“2020-10-18T16:00:00Z”,即数据加载器假设提供的日期不是UTC,而是从UTC偏移0的夏时制时间,即一小时后。如果您在冬季将10月18日改为27日,则时间会匹配
如何在数据集中加载适当的UTC时间戳,而不必担心是夏季还是冬季?在H2中,应使用带时区的时间戳(9)数据类型来存储即时值,如果您的持久化层将它们直接传递到H2并直接读取它们,那么它们就可以了;H2本机支持即时
。您的持久层很可能进行了一些不正确的转换。(TIMESTAMP
数据类型没有时区偏移信息,无法可靠地用于DST或其他转换附近的时间戳。)在H2中,时间戳(9)使用时区
数据类型应用于存储
即时
值,如果您的持久层按原样直接将其传递给H2并直接读取,则这些值就可以了;H2本机支持即时
。您的持久层很可能进行了一些不正确的转换。(TIMESTAMP
数据类型没有时区偏移信息,无法可靠地用于DST附近的时间戳或其他转换。)