当前位置: 首页 > 知识库问答 >
问题:

使用Gson在java中将LocalDateTime序列化并反序列化为RFC 3339格式的JSON

微生令雪
2023-03-14

我目前正在尝试将一些包含时间戳的数据库对象存储到图形数据库(dgraph)中。我想使用JSON轻松获取日期和时间信息,并将其存储在图表中的datetime节点中,但图表将只接受格式为RFC 3339格式且带有可选时区的数据(例如2006-01-02T15:04:05.99999999)。

我一直在使用Gson序列化和反序列化以及其他数据类型工作正常,但是尝试查询日期返回null。我尝试使用setDateFormat,但这似乎没有改变任何事情。我目前将时间戳存储在LocalDateTime类中,但如果需要,可以更改它。

我怎样才能强迫Gson在我的时间戳中使用正确的格式?它目前将它们放在这个格式中

"start":{
  "date":{"year":2011,"month":1,"day":2},
  "time":{"hour":10,"minute":4,"second":0,"nano":0}
}

我是新的序列化和JSON一般,所以任何指针将不胜感激。

我已经意识到gson似乎将我的时间戳分离成两个独立的数据块,我如何强制它以正确的格式将它们放在一起?我需要类型适配器吗?(我不知道它们是如何工作的)

共有1个答案

郎魁
2023-03-14

如果您可以使用库,Joda Time提供了一个简单的解决方案:

系列化

DateTime dt = new DateTime(2006, 1, 2, 15, 4, 5, 999, DateTimeZone.UTC);
System.out.println(dt);

-------- OUTPUT --------
2006-01-02T15:04:05.999Z

脱盐作用

DateTime dt = DateTime.parse("2006-01-02T15:04:05.999Z");
System.out.println(dt);

-------- OUTPUT --------
2006-01-02T15:04:05.999Z

至于标准库:在处理时区时,您应该使用ZoneDateTime,而不是LocalDateTime

 类似资料:
  • 我试图使用Google的Gson库在Java中序列化和反序列化一个HashMap。我希望序列化这里所示的hashmap,将其保存到一个文件中,然后在以后的阶段从一个文件中读取并反序列化它。 HashMap如下所示 反序列化类的反序列化逻辑,以及我目前基于Web上找到的示例实现的对象类。IS: 下面是在test函数中调用的序列化和反序列化代码。测试函数序列化上面HashMap的一个对象,创建一个字符

  • 我们在elasticsearch索引中有一个日期字段,其中填充了一个长的。 字段映射为: 我使用和进行此配置: 但是当我试图用一个字段解析索引中的实体时,例如: 我收到一个错误: 我认为,可以将一个长的反序列化为一个日期,但我看不出我遗漏了什么。 如果我把它映射到Long,它当然会起作用,如果值存储为String,并且我们在JsonFormat中正确地对其进行造型和格式化,它也会起作用。但是有没有

  • 问题内容: 我有按类别序列化为ISO-8601格式的字段。 当我收到以下JSON时, 我想通过工厂方法反序列化。我所有的尝试都以: 无法从值()实例化类型[简单类型,类]的值;没有单一的构造函数/工厂方法 我该如何实现?如何指定工厂方法? 编辑: 通过将jackson-datatype-jsr310模块包含到项目中并与一起使用,解决了该问题 。 问题答案: 香草杰克逊没有一种方法来 反序列化 一个

  • 问题内容: 我已经在SO中阅读了一些关于答案的问题,这些问题与JSON属性之间的序列化和反序列化有关,但我似乎无法使其正常工作。 我已经设法将Spring Boot应用程序配置为以所需的格式()返回日期,但在以JSON格式接收值时遇到问题。 这些是我到目前为止所做的所有事情: 增加了对Maven的依赖: 在我的主要课程中指定: 禁用序列化作为时间戳记: 这是我的日期时间实体映射: 在我的数据库中,

  • 我正在使用gson进行改造,将json反序列化为领域对象。这在大多数情况下都很有效。处理问题时会出现麻烦 RealmList(字符串(或任何其他基本数据类型)) 由于Realm不支持RealmList,其中E不扩展Realm对象,所以我将字符串包装在RealmObject中。 我的领域对象如下 SimpleRealmObj工作正常,因为它只有字符串元素 如何反序列化stringStuff?我试过使

  • 我已经将Spring Boot应用程序配置为以我希望的格式()返回日期,但是在JSON中接受这种格式的值有问题。 这些都是我到目前为止所做的事情: 为添加了maven依赖项: 在我的数据库中,我以以下格式将此日期存储为时间戳:。 如果我通过我的控制器访问这个实体,它将返回具有正确startDate格式的JSON。但是,当我尝试使用格式发布并反序列化它时,我会遇到以下异常: 我知道有很多关于这个话题