RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1166889
Accepted
pra_soul_owl
pra_soul_owl
Asked:2020-08-17 15:59:59 +0000 UTC2020-08-17 15:59:59 +0000 UTC 2020-08-17 15:59:59 +0000 UTC

从字符串中解析 OffsetDateTime

  • 772

它来自具有应进一步处理为json的字段的服务。"time": "2020-05-28T12:34:56"OffsetDateTime

我尝试了这些方法,但错误正在下降:

String date = "2020-05-28T12:34:56";
OffsetDateTime offsetDateTime = OffsetDateTime.parse(date, DateTimeFormatter.ISO_DATE_TIME);
OffsetDateTime offsetDateTime = OffsetDateTime.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"));

请告诉我。

java
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Andrew Bystrov
    2020-08-17T17:15:32Z2020-08-17T17:15:32Z

    您可以将此字符串解析为LocalDateTime,然后将其转换为OffesetDateTime类似的内容

    jshell> var date = "2020-05-28T12:34:56"; // нужная строка
    date ==> "2020-05-28T12:34:56"
    
    jshell> var localDateTime = java.time.LocalDateTime.parse(date); // переводим в LocalDateTime
    localDateTime ==> 2020-05-28T12:34:56
    
    jshell>var offsetDateTime localDateTime.atOffset(java.time.ZoneOffset.ofHours(0)); // переводит в OffsetDateTime
    offsetDateTime ==> 2020-05-28T12:34:56Z
    
    • 1
  2. Best Answer
    Alexandr
    2020-08-17T17:22:07Z2020-08-17T17:22:07Z

    您可以使用自定义反序列化器

    package com.somepackage;
    
    import com.fasterxml.jackson.annotation.JsonProperty;
    import com.fasterxml.jackson.core.JsonParser;
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.DeserializationContext;
    import com.fasterxml.jackson.databind.DeserializationFeature;
    import com.fasterxml.jackson.databind.JsonDeserializer;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
    import lombok.Data;
    import org.junit.jupiter.api.Test;
    
    import java.io.IOException;
    import java.time.LocalDateTime;
    import java.time.OffsetDateTime;
    import java.time.ZoneId;
    import java.time.ZoneOffset;
    import java.time.format.DateTimeFormatter;
    
    import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
    import static org.junit.jupiter.api.Assertions.assertEquals;
    
    public class OffsetDateTimeTest {
    
        @Data
        static class SomeClass {
    
            @JsonProperty("time")
            @JsonDeserialize(using = CustomDeserializer.class)
            private OffsetDateTime time;
        }
    
        public static class CustomDeserializer extends JsonDeserializer<OffsetDateTime> {
    
            private final DateTimeFormatter formatter;
    
            public CustomDeserializer() {
                this.formatter =
                        DateTimeFormatter.ofPattern(
                                "yyyy-MM-dd'T'HH:mm:ss");
            }
    
            public CustomDeserializer(
                    DateTimeFormatter formatter) {
                this.formatter = formatter;
            }
    
            @Override
            public OffsetDateTime deserialize(
                    JsonParser parser,
                    DeserializationContext context) throws IOException, JsonProcessingException {
                LocalDateTime ldt =
                        LocalDateTime.parse(parser.getText(), formatter);
                ZoneId z = ZoneId.systemDefault();
                ZoneOffset zo = z.getRules().getOffset(ldt);
                return ldt.atOffset(zo);
            }
        }
    
        @Test
        public void testDeserialization() {
            assertDoesNotThrow(
                    () -> {
                        String json = "{\"time\": \"2020-05-28T12:34:56\"}";
                        ObjectMapper mapper = new ObjectMapper();
                        SomeClass someClass =
                                mapper.readValue(json, SomeClass.class);
                        assertEquals(someClass.getTime().toString(), "2020-05-28T12:34:56+06:00");
                    });
        }
    
    }
    
    • 1

相关问题

  • wpcap 找不到指定的模块

  • 如何以编程方式从桌面应用程序打开 HTML 页面?

  • Android Studio 中的 R.java 文件在哪里?

  • HashMap 初始化

  • 如何使用 lambda 表达式通过增加与原点的距离来对点进行排序?

  • 最大化窗口时如何调整元素大小?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5