Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-日期、格式、时区和Spring引导默认值_Java_Date_Spring Boot_Timezone - Fatal编程技术网

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

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类是包含时区信息还是仅包含长格式的

我有一个带有日期字段的简单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"
  • 是什么造成了这种差异
  • 为什么Java将日期视为BST
  • Java
    Date
    类是包含时区信息还是仅包含长格式的普通时间戳
  • 将DTO序列化为JSON时,
    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,即“英国标准时间”。