spring - REST 服务器和 Postman 之间的日期值不匹配
问题描述
我正在使用 spring 框架开发一个 REST 服务器。
我正在返回一个模型对象列表(包含日期字段的员工
所以我的模型类看起来像:
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?任何与时区相关的因素介于两者之间吗?
解决方案
您应该避免使用Date
,因为它现在是一个遗留类。Java 8为基于 ISO 日历系统的日期、时间、瞬间和持续时间引入了新的 API 。
最接近的等价物Date
是Instant
表示时间戳,即 UTC 时间线上的时刻。但您可能想OffsetDateTime
改用它,因为它存储所有日期和时间字段以及与 UTC/格林威治的偏移量。
引用OffsetDateTime
类文档:
它旨在
ZonedDateTime
或Instant
用于在更简单的应用程序中对数据进行建模。此类 [OffsetDateTime
] 可以在更详细地建模日期时间概念时使用,或者在与数据库或网络协议通信时使用。
推荐阅读
- julia - QuestDB 对 Julia 编程语言的支持
- python - 如何将二进制数据作为输出?
- flutter - 我的 ScanStreamTransformer 函数中遗漏了什么,需要 2 个位置参数,但找到了 1 个
- azure-devops - Azure DevOps - 导出项目用户权限
- vue.js - Vue不同的方法表示法
- javascript - GoJs 有条件地渲染模板的一部分
- c# - 根据修改日期从路径中选择最新文件
- python - 如何使用 python 正则表达式从大量显示的输出中提取特定消息?
- java - 如何使用 java sdk 在 azure data Lake gen1 中创建资源?
- google-cloud-platform - GCP MQL 查询:获取指标/分钟