Java 您能否通过改装2和Gson将ISO 8601时间戳直接映射到OffsetDateTime或ZoneDateTime?

Java 您能否通过改装2和Gson将ISO 8601时间戳直接映射到OffsetDateTime或ZoneDateTime?,java,android,gson,retrofit2,threetenbp,Java,Android,Gson,Retrofit2,Threetenbp,在Android上,使用改型2及其Gson转换器,您可以映射 ISO 8601字符串,如后端JSON响应中的2016-10-26T11:36:29.742+03:00,直接输入POJO中的java.util.Date字段。这是现成的 现在,我正在使用lib,它提供了java.time类的后端口版本,我想知道是否有可能将ISO时间戳字符串直接映射到更好、更现代的类型,例如OffsetDateTime或ZonedDateTime 显然,在大多数情况下,服务器端的Java8很容易从2016-10-26

在Android上,使用改型2及其Gson转换器,您可以映射 ISO 8601字符串,如后端JSON响应中的2016-10-26T11:36:29.742+03:00,直接输入POJO中的java.util.Date字段。这是现成的

现在,我正在使用lib,它提供了java.time类的后端口版本,我想知道是否有可能将ISO时间戳字符串直接映射到更好、更现代的类型,例如OffsetDateTime或ZonedDateTime

显然,在大多数情况下,服务器端的Java8很容易从2016-10-26T11:36:29.742+03:00“转换为OffsetDateTime或ZonedDateTime,因为日期字符串包含时区信息

我尝试在POJO中同时使用OffsetDateTime和ZonedDateTime而不是Date,但至少开箱即用不起作用。如果你能在安卓上用改型2干净利落地做到这一点,你有什么想法吗

依赖项:

compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'

compile 'com.jakewharton.threetenabp:threetenabp:1.0.4'
构建改装实例:

new Retrofit.Builder()
// ...
.addConverterFactory(GsonConverterFactory.create())
.build();
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(LocalDate.class, new YourTypeAdapter());
Gson gson = gsonBuilder.create();
你可以:

创建一个实现JsonDeserializer的类型适配器,并将JSON文本转换为所需的任意三十种类型。LocalDate的示例:

对于您想要的三种类型,实现类似的功能只是一个练习

在生成Gson实例时,在GsonBuilder上注册类型适配器:

new Retrofit.Builder()
// ...
.addConverterFactory(GsonConverterFactory.create())
.build();
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(LocalDate.class, new YourTypeAdapter());
Gson gson = gsonBuilder.create();
向Reformation.Builder注册Gson实例:

使用您的Gson车型类别中的三种类型进行改装

类似地,如果要将Three-Ten类型序列化为JSON,还可以在类型适配器中实现JsonSerializer。

您可以:

创建一个实现JsonDeserializer的类型适配器,并将JSON文本转换为所需的任意三十种类型。LocalDate的示例:

对于您想要的三种类型,实现类似的功能只是一个练习

在生成Gson实例时,在GsonBuilder上注册类型适配器:

new Retrofit.Builder()
// ...
.addConverterFactory(GsonConverterFactory.create())
.build();
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(LocalDate.class, new YourTypeAdapter());
Gson gson = gsonBuilder.create();
向Reformation.Builder注册Gson实例:

使用您的Gson车型类别中的三种类型进行改装


类似地,如果您想将Three Ten类型序列化为JSON,也可以在您的类型适配器中实现JsonSerializer。

我创建了一个小型库,它完全符合laalto在其答案中提出的要求,请随意使用:

我创建了一个小型库,它完全符合laalto在其答案中提出的要求,请随意使用它:

我推荐这个答案!:我推荐这个答案!: