首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OffsetDateTime格式无效

OffsetDateTime格式无效
EN

Stack Overflow用户
提问于 2020-07-23 19:31:26
回答 1查看 105关注 0票数 1

我尝试获取一个包含zoneDateTime字母的字符串。

代码语言:javascript
复制
ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule()).disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
String date = "2019-06-12T22:00:00-04:00";
OffsetDateTime odt = objectMapper.readValue(date, OffsetDateTime.class);
System.out.println(odt);

杰克逊说: parserException:意想不到的角色-

此命令有效

代码语言:javascript
复制
OffsetDateTime.parse("2019-06-12T22:00:00-04:00"); 

所以看起来像是杰克逊的问题

EN

回答 1

Stack Overflow用户

发布于 2020-07-23 22:42:56

objectMapper.readValue(date, OffsetDateTime.class)期望字符串date是有效的JSON。

因此,使用这种方法的一种方法是从下面这样的示例开始:

代码语言:javascript
复制
String json = "{ \"odt\" : \"2019-06-12T22:00:00-04:00\" }";

然后创建一个对象来存储此JSON,例如:

代码语言:javascript
复制
import java.time.OffsetDateTime;

public class ODT {

    private OffsetDateTime odt;

    public OffsetDateTime getOdt() {
        return odt;
    }

    public void setOdt(OffsetDateTime odt) {
        this.odt = odt;
    }
    
}

现在,下面的代码将使用对象映射器成功处理输入:

代码语言:javascript
复制
ODT myOdt = objectMapper.readValue(json, ODT.class);
System.out.println(myOdt.getOdt());

这将打印:

代码语言:javascript
复制
2019-06-13T02:00Z

更新

要使用原始偏移而不是UTC显示此值,可以使用以下命令:

代码语言:javascript
复制
System.out.println(myOdt.getOdt().atZoneSameInstant(ZoneId.of("-04:00")));

这将打印:

代码语言:javascript
复制
2019-06-12T22:00-04:00

这与我们的起始JSON字符串中的原始值相同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63053211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档