我正在使用 ajava.sql.Date将日期字段存储在我的一个域对象中。此字段映射到 MySQLDATE列。当我尝试通过杰克逊将此字段序列化为 JSON 时,杰克逊似乎没有考虑夏令时。
这是我的域对象中该字段的样子:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "EST")
private Date date;
如您所见,Jackson 已被指示将时区解释为 EST。我的 MySQL 数据库也使用 EST 时区:
SHOW VARIABLES LIKE '%zone';
Output:
system_time_zone | EST
time_zone | SYSTEM
我的麻烦是,对于夏令时开始和结束之间的日期,杰克逊返回的日期比数据库中存储的日期少一天。我假设这是因为杰克逊没有考虑夏令时。
我通过尝试将Java 字段中的日期格式从yyyy-MM-dd更改为 来得出这个结论。yyyy-MM-dd HH:mm:ss我注意到服务器返回了类似的2017-03-13 00:00:00内容,但杰克逊将其序列化为2017-03-12 23:00:00(少一小时,这是夏令时影响的 EST 时间)。
有没有办法克服这个问题?另外,java.sql.Date考虑到它没有时间对应物,使用正确的类型吗?我一直在考虑java.time.LocalDate改用,但我还没有看到它是否会成功。
慕的地6264312
浮云间
随时随地看视频慕课网APP
相关分类