博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android处理java的date数据的问题
阅读量:6804 次
发布时间:2019-06-26

本文共 2009 字,大约阅读时间需要 6 分钟。

  hot3.png

背景

直接在接口中转Date对象时候,Gson默认只会序列化/反序列化 Date().toString()后的字符串,类似 Oct 16, 2015 12:28:22 PM ,使用gson解析后台返回的数据时,无意发现了一个问题,如果使用 Date 类型的数据,将会出现这样的情形:

  • 数据:"firstDataTime" : { "date" : 29, "day" : 5, "hours" : 14, "minutes" : 37, "month" : 6, "seconds" : 14, "time" : 1469774234000, "timezoneOffset" : -480, "year" : 116 }
  • 解析时,就会出现两个问题:
  1. 必须按照对象来解析,这个,Date对象不是这样子的啊,直接按照Date型解析肯定出问题;
  2. 使用时基本上不会使用Date对象,都需要格式化或转换为String型的数据,所以也不能直接使用; 所以,使用时各种不方便,可是Gson这么强大的工具能考虑不到这个问题吗,显然不是,只是自己孤陋寡闻罢了

解决

  1. 定义一个抽象类,同时实现序列化和反序列化接口,如下 public abstract class GsonTypeAdapter<T> implements JsonSerializer<T>, JsonDeserializer<T> {}
  2. 在使用gson解析时,集成上述GsonTypeAdapter,实现相应的序列化和反序列化方法,即可
  3. 解析,使用GsonBuilder.registerTypeAdapter,初始化Gson对象, Gson gson = new GsonBuilder().registerTypeAdapter(Timestamp.class, new GsonTypeAdapter(){// 方法实现 } ).setDateFormat("yyyy-MM-dd HH:mm:ss").create();

给个例子:

Gson gson = new GsonBuilder().registerTypeAdapter(Timestamp.class, new TimestampTypeAdapter()).setDateFormat("yyyy-MM-dd HH:mm:ss").create();class TimestampTypeAdapter implements JsonSerializer
, JsonDeserializer
{ public JsonElement serialize(Timestamp src, Type arg1, JsonSerializationContext arg2) { DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS"); String dateFormatAsString = format.format(new Date(src.getTime())); return new JsonPrimitive(dateFormatAsString); } public Timestamp deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { if (!(json instanceof JsonPrimitive)) { throw new JsonParseException("The date should be a string value"); } try { DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS"); Date date = (Date) format.parse(json.getAsString()); return new Timestamp(date.getTime()); } catch (Exception e) { throw new JsonParseException(e); } }}

其他,正常使用gson解析即可

转载于:https://my.oschina.net/Gxhpro/blog/744669

你可能感兴趣的文章
MDT 2013 从入门到精通之无法分析或处理pass[specialize]文件
查看>>
桌面支持--512-Rear chassis fan not detected
查看>>
Django 开源相册组件介绍 django-photologue
查看>>
IntelliJ IDEA 14 创建Web项目
查看>>
Redis server命令
查看>>
PeerConnection
查看>>
关于ext-js 中的自定义校验
查看>>
服务端response对象属性和方法
查看>>
护眼色
查看>>
Linux下安装JDK
查看>>
axis2报错:The following error occurred during schema generation: null
查看>>
JS this指向详解
查看>>
自动布局
查看>>
【云计算的1024种玩法】手把手教你如何编译升级 OpenResty
查看>>
Mac Appium环境安装
查看>>
android源码分享,布局切换微信提醒对话框下拉刷新Cell进度动画代码下载
查看>>
Hello world!
查看>>
Solidity 函数returns多个值的接收方式 总结
查看>>
基于PCDN技术的无延时直播方案
查看>>
七周二次课
查看>>