我正在尝试反序列化JSON文件并将其用于单元测试。但是由于值不匹配,测试失败。 当我查看日志时,从反序列化对象获得的时间比我期望的晚了8个小时。我认为它将我的时区应用于值(GMT + 8)。 如果我在JSON文件中将时间设置为早8小时,则测试通过。但是我想获得没有时区的正确时间,这样我就不必使数据依赖时区。
以下是一些示例代码: result.JSON
{
"userId" : 1,
"lastVisit" : 1546300800000
}
testUserData.java
public void checkUserData() throws Exception {
ObjectMapper om = new ObjectMapper();
UserData expected = om.readValue(new File("result.JSON"), UserData.class);
long lastVisit = 1546300800 * 1000; //2019-01-01 00:00:00 in millisecond
UserData actual = new UserData(1, lastVisit);
ReflectionAssert.assertReflectionEquals(expected, actual);
}
UserData.java
import java.util.Date;
public int userId;
public Date lastVisit;
public UserData(int userId, long lastVisitTime) {
this.userId = userId;
this.lastVisit = new Date(lastVisitTime);
}
单元测试日志(摘录):
--- Found following differences ---
lastVisit: expected: Tue Jan 01 08:00:00 CST 2019, actual: 2019-01-01
答案 0 :(得分:1)
将TimeZone
设置为需要反序列化的区域日期
ObjectMapper mapper = new ObjectMapper();
mapper.setTimeZone(TimeZone.getTimeZone(ZoneOffset.UTC));
答案 1 :(得分:0)
我自己找到了答案。 我已经尝试按照答案中的建议设置时区,但是没有用。 对于那些有相同问题的人,我通过设置日期格式而不是设置时区来解决此问题,并使用字符串日期而不是UNIX时间:
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"));