改造日期转换器
Retrofit Date Converter
我有一个 WCF 服务,它 return 是 Android 应用程序的对象列表。其中一个属性是 DateTime 属性。 return 格式是 JSON 并且我在 Android 端以这种格式 /Date(1441117247253+0200)/
获取日期。我正在使用 com.squareup.retrofit:retrofit:1.9.0 从我的服务中获取数据。
我不知道如何使用 Retrofit 将字符串日期创建到 Date 对象中。我查看了“自定义转换器”部分下的这个 http://square.github.io/retrofit/,但不知道如何进一步。这是我尝试过的方法,但我不知道如何实现转换器 class。
像这样创建 restAdapter:
restAdapter = new RestAdapter.Builder()
.setConverter(new DotNetDateConverter())
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint(API).build();
和我不知道如何进一步实现的 DotNetDateConverter Class:
public class DotNetDateConverter implements Converter
{
@Override
public Object fromBody(TypedInput body, Type type) throws ConversionException
{
return null;
}
@Override
public TypedOutput toBody(Object object)
{
return null;
}
}
响应中还有其他字段很好,但如何将 /Date(1441117247253+0200)/
更改为正确的 java.util.Date 对象?没有转换器,我得到 com.google.gson.JsonSyntaxException:/Date(1441117247253+0200)/
显然是因为字符串不能转换为日期。
如有任何帮助,我们将不胜感激。
好的,经过一番挖掘,我发现了 this。我的做法是错误的。所以我最终创建了一个这样的转换器:
public class DotNetDateConverter implements JsonDeserializer<Date>
{
@Override
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
{
String s = json.getAsJsonPrimitive().getAsString();
long l = Long.parseLong(s.substring(s.indexOf("(")+1, s.indexOf("+")));
Date d = new Date(l);
return d;
}
}
我也必须这样注册:
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DotNetDateConverter());
restAdapter = new RestAdapter.Builder()
.setConverter(new GsonConverter(gsonBuilder.create()))
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint(API).build();
我不得不稍微更改代码以适应我的特定情况,日期以 /Date(1441117247253+0200)/
和时区的形式出现。也许其他人可能会发现一些用处...
我有一个 WCF 服务,它 return 是 Android 应用程序的对象列表。其中一个属性是 DateTime 属性。 return 格式是 JSON 并且我在 Android 端以这种格式 /Date(1441117247253+0200)/
获取日期。我正在使用 com.squareup.retrofit:retrofit:1.9.0 从我的服务中获取数据。
我不知道如何使用 Retrofit 将字符串日期创建到 Date 对象中。我查看了“自定义转换器”部分下的这个 http://square.github.io/retrofit/,但不知道如何进一步。这是我尝试过的方法,但我不知道如何实现转换器 class。
像这样创建 restAdapter:
restAdapter = new RestAdapter.Builder()
.setConverter(new DotNetDateConverter())
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint(API).build();
和我不知道如何进一步实现的 DotNetDateConverter Class:
public class DotNetDateConverter implements Converter
{
@Override
public Object fromBody(TypedInput body, Type type) throws ConversionException
{
return null;
}
@Override
public TypedOutput toBody(Object object)
{
return null;
}
}
响应中还有其他字段很好,但如何将 /Date(1441117247253+0200)/
更改为正确的 java.util.Date 对象?没有转换器,我得到 com.google.gson.JsonSyntaxException:/Date(1441117247253+0200)/
显然是因为字符串不能转换为日期。
如有任何帮助,我们将不胜感激。
好的,经过一番挖掘,我发现了 this。我的做法是错误的。所以我最终创建了一个这样的转换器:
public class DotNetDateConverter implements JsonDeserializer<Date>
{
@Override
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
{
String s = json.getAsJsonPrimitive().getAsString();
long l = Long.parseLong(s.substring(s.indexOf("(")+1, s.indexOf("+")));
Date d = new Date(l);
return d;
}
}
我也必须这样注册:
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DotNetDateConverter());
restAdapter = new RestAdapter.Builder()
.setConverter(new GsonConverter(gsonBuilder.create()))
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint(API).build();
我不得不稍微更改代码以适应我的特定情况,日期以 /Date(1441117247253+0200)/
和时区的形式出现。也许其他人可能会发现一些用处...