Java - 日期、格式、时区和 Spring Boot 默认值

标签 java date spring-boot timezone

我有一个带有日期字段的简单 Java 对象:

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date date;

当我使用调试器调查日期时,我看到:

Wed Jun 14 00:00:00 BST 2017

但是一旦我用 Spring boot controller 返回它,我得到:

"date": "2017-06-13 23:00:00"
  1. 造成差异的原因是什么?
  2. 为什么 Java 将日期视为 BST
  3. Java Date 类是否包含时区信息或只是长格式的普通时间戳?
  4. 在将 DTO 序列化为 JSON 时,Spring boot 默认使用 UTC 格式吗?

最佳答案

java.util.Date没有时区信息(只有 long 时间戳),但它在 toString() 中使用系统的默认时区方法 - 您可以找到有关此的更多信息 here (正如评论中已经建议的那样)。

只需检查 TimeZone.getDefault() 的值.它可能是 Europe/London - 由于伦敦现在处于夏令时,这个时区的简称(由 Date.toString() 使用)是 BST .

如您的输出所示,Spring 可能正在使用 UTC (因为 2017-06-13 23:00:00UTC 中是 2017-06-14 00:00:00BST 中)。

关于Java - 日期、格式、时区和 Spring Boot 默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44545359/

相关文章:

java - 构造函数注入(inject)与字段注入(inject)

java - 正确验证同一天内的时间间隔

PHP 二月日期 : "2015-01-31" +1 month: "2015-03-30". 如何修复?

javascript - 基于 getDay 对象 JavaScript 显示文本 "Even Day"或 "Odd Day"

hibernate - 配置 spring 验证和 hibernate 验证

mysql - 带有 Thymeleaf、Spring boot、Mysql 的 Ckeditor

java - 如何访问不同访问者之间共享的文件?

java - 在 Seam 中的事务提交时捕获异常

java - 操作以下字符串的最佳方法是什么?

mysql - Java 8 java.time 未正确映射到 mysql