gpt4 book ai didi

java - Spring Boot 的时区

转载 作者:行者123 更新时间:2023-12-02 05:28:06 29 4
gpt4 key购买 nike

我使用 SpringBoot 并尝试将此返回转换为我的对象

...
{
"data": "2015-05-29",
"codigo": 618393,
"apresentante": null,
"total": 6,
"desconto": 0,
"pago": 6
},
...

所以我有一个对象

private Date data;

我有一个 SimpleDateFormat:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
System.out.println(sdf.format(myObjet.getData()));

并打印

28/05/2015,但正确的是 29/05/2015

我的 application.properties 有以下几行:

spring.jackson.date-format=yyyy-MM-dd
spring.jackson.time-zone=America/Sao_Paulo

有人知道为什么会发生这种情况吗?谢了

最佳答案

首先,您怀疑 Jackson 配置干扰 SimpleDateFormat解析/格式化,但这是错误的:尽管 Jackson 使用 SimpleDateFormat解析/格式化代码,spring.jackson.*的配置不会影响每一个SimpleDateFormat您在应用程序中创建的实例。它们是两个独立的事物。

您必须使用 ObjectMapper ,和@Autowired ,使用一些上下文配置;尽管据我观察,我怀疑 spring.jackson.time-zone config 不会影响 json/Date 解析/格式化的结果,即 Jackson 内部在序列化/反序列化时不使用该值。

我的结论是 spring.jackson.time-zone 都不是要么 mapper.setTimezone()当我们设置 @JsonFormat(timezone = "xxx") 时,会影响(反)序列化中时区转换的处理。 ;后者似乎压倒了前两者;并且,应用程序的默认时区将是转换时的“目标”时区。

我建议您附加另一个简短但完整的测试用例,以显示哪些内容有效,哪些无效。

检查我的这个测试,并尝试发布一个完整的测试,如下所示:

@Test
public void testSimpleDateFormat() throws Exception {
System.out.println("The default timezone is: " + TimeZone.getDefault().getDisplayName());
SimpleDateFormat f = new SimpleDateFormat("yyyy/MM/dd");
String ds = "2015/05/29";
Date d = f.parse(ds);
System.out.println(d);
}

一定要从简单的测试开始,然后一点一点地添加更多变量。

关于java - Spring Boot 的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37844285/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com