Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >改造日期转换器

改造日期转换器
EN

Stack Overflow用户
提问于 2015-09-02 12:33:19
回答 1查看 6.7K关注 0票数 3

我有一个WCF服务,它向Android应用程序返回对象列表。其中一个属性是DateTime属性。返回格式是JSON,我将在安卓端以这种格式获取/Date(1441117247253+0200)/格式的日期。我使用com.square up.retufit:retrofit:1.9.0从我的服务中获取数据。

我不知道如何使用Retrofit将字符串日期创建为date对象。我在“自定义转换器”部分下查看了这个http://square.github.io/retrofit/,但不知道如何更进一步。这是我尝试过的,但我不知道如何实现转换器类。

创建restAdapter如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
restAdapter = new RestAdapter.Builder()
                .setConverter(new DotNetDateConverter())
                .setLogLevel(RestAdapter.LogLevel.FULL)
                .setEndpoint(API).build();

以及我不知道如何进一步实现的DotNetDateConverter类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)/,因为字符串不能转换到日期。

任何援助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-03 14:30:09

好吧,经过一番周旋,我偶然发现了this。我的方法是错的。所以我最终创建了这样一个转换器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
    }
}

我还必须这样注册:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)/的形式出现在时区中。也许其他人会发现这有什么用..。

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

https://stackoverflow.com/questions/32362580

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文