美文网首页程序员
关于Gson解析时间时的问题

关于Gson解析时间时的问题

作者: Cocoonshu粽子 | 来源:发表于2018-01-25 12:49 被阅读1087次

近日在用Gson 对时间进行解析时出现以下错误,诡异在再生产环境竟然没有这个问题,测试环境就是不好使~

报错截图

经过查看源码如下:
DateTypeAdapter 源码


源码

逻辑是依次使用localFormat、enUsFormat、ISO8601Utils进行解析;
先看localFormat和enUsFormat在哪创建的;
这是DateTypeAdapter 的构造方法


image.png

localFormat 取的是运行系统的配置:在Linux系统这个位置在/etc/sysconfig/i18n文件下:LANG="zh_CN.GB18030"
enUsFormat 指的美国时区
如果这两个转换均catch 使用ISO8601Utils 进行转换 这个格式只能转换iso 8601 时间格式;
好了,说了这么多废话,怎么解决呢?
方案一:
修改了Linux系统的/etc/sysconfig/i18n 由LANG="en_US.UTF-8" 修改为LANG="zh_CN.GB18030" ,能解决此问题,但是不同的地区的机房会有问题~
方案二:
问题的根本是DateTypeAdapter 的问题
类内自己转换成Date自定义TypeAdaptor就能彻底解决这个问题,截图如下:


image.png

代码:

        GsonBuilder builder = new GsonBuilder();

        // Register an adapter to manage the date types as long values
        builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
            public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
                return new Date(json.getAsJsonPrimitive().getAsLong());
            }
        });

        Gson gson =builder.create();

相关文章

网友评论

    本文标题:关于Gson解析时间时的问题

    本文链接:https://www.haomeiwen.com/subject/ctamaxtx.html