Java-日期、格式、时区和Spring引导默认值
我有一个带有日期字段的简单Java对象:Java-日期、格式、时区和Spring引导默认值,java,date,spring-boot,timezone,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 bootcontroller返回它,我得到: "date": "2017-06-13 23:00:00" 是什么造成了这种差异 为什么Java将日期视为BST JavaDate类是包含时区信息还是仅包含长格式的
@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"
Date
类是包含时区信息还是仅包含长格式的普通时间戳Spring boot
是否默认使用UTC
格式java.util.Date
没有时区信息(只有long
timestamp),但它在toString()
方法中使用了系统的默认时区-您可以找到有关此的更多信息(如注释中所示)
只需检查TimeZone.getDefault()的值
。它可能是欧洲/伦敦
——就像现在的伦敦在夏季一样,这个时区的简称(由Date.toString()
)是英国夏令时
正如您的输出所显示的,Spring可能正在使用
UTC
(正如UTC
中的2017-06-13 23:00:00
是2017-06-14 00:00:00
中的BST
)。在调试器中,您会看到默认的日期。对于字符串输出,在日期类中阅读更多内容不支持时区,并且在UTC中总是有效的。有时,UTC可能显示为BST,即“英国标准时间”。