我正在使用spring框架开发REST服务器。
我正在返回Model对象的列表(雇员,其中包含Date字段
所以我的Model类看起来像:
Class Employee {
private String empId;
private Date joinDate;
}
我的控制器方法如下:
@GetMapping("/Employee")
public List<EmployeeLeaves> searchEmployeeLeaveDetails(@RequestParam(value = "filter", required = false) String filter) throws Exception {
List<Employee> empList = service.searchEmployee(filter);
return empList;
}
当我尝试从邮递员那里调用此api作为响应时,它总是显示joinDate比实际日期少1天。
我调试了此问题,发现在控制器中日期是正确的
下面是测试/调试结果
Value for joinDate(Column type is Date) in Database: '2018-10-27'
Value for joinDate(java.sql.timestamp) in Controller: 2018-10-27 00:00:00.0
Value retried in postman's JSON response : "2018-10-26T18:30:00.000+0000"
任何人都知道为什么邮递员回复将日期显示为26而不是27? 两者之间是否存在任何与时区相关的因素?
答案 0 :(得分:1)
您应该避免使用Date
,因为它现在是旧类。 Java 8引入了基于ISO日历系统的new API for dates, times, instants and durations。
与Date
最接近的等效项是Instant
,它表示时间戳记,即UTC时间轴上的时刻。但是您可能想改用OffsetDateTime
,因为它存储了所有日期和时间字段以及与UTC /格林威治标准时间的偏移量。
引用OffsetDateTime
类文档:
打算在更简单的应用程序中使用
ZonedDateTime
或Instant
为数据建模。在更详细地建模日期时间概念时,或者在与数据库或网络协议进行通信时,可以使用此类[OffsetDateTime
]。