背景

直接在接口中转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 }

解析时,就会出现两个问题:

必须按照对象来解析,这个,Date对象不是这样子的啊,直接按照Date型解析肯定出问题;

使用时基本上不会使用Date对象,都需要格式化或转换为String型的数据,所以也不能直接使用; 所以,使用时各种不方便,可是Gson这么强大的工具能考虑不到这个问题吗,显然不是,只是自己孤陋寡闻罢了

解决

定义一个抽象类,同时实现序列化和反序列化接口,如下 public abstract class GsonTypeAdapter implements JsonSerializer, JsonDeserializer {}

在使用gson解析时,集成上述GsonTypeAdapter,实现相应的序列化和反序列化方法,即可

解析,使用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解析即可

java宝石迷阵代码_Android处理java的date数据的问题相关推荐

  1. java宝石迷阵代码_java 创建一个board,然后在上面像宝石迷阵一样随机生成各种宝石...

    展开全部 import java.awt.GridLayout;import java.awt.Image; import javax.swing.ImageIcon; import javax.sw ...

  2. java调节音量代码_用Java调用VC音量控制程序_java

    前言 本文通过java的Runtime接口来实现调用其他语言实现的应用程序,进而来实现对计算机硬件信息的监控和控制.本文是多媒体信息系统的一个部分,就是调整计算机音量. 使用VC编写音量控制程序 本控 ...

  3. java空心正方形代码_从Java中的用户输入绘制空心星号正方形/矩...

    我正在尝试创建一个程序,要求用户提供正方形/矩形的宽度和长度尺寸,然后使用#符号将其绘制出来.我几乎了解了,除了我似乎不太了解矩形的右边以正确打印出来- 这是我的代码: import java.uti ...

  4. java dijkstra算法代码_[转载]Java实现dijkstra算法: 地图中任意起点寻找最佳路径...

    最近在复习java,下学期要用,写这个练手.  技术较粗糙,见谅. 代码里用的是这幅地图,根据实际情况更改,在addNode方法中 这个是运行结果,起点和终点在 运行wrap(String qidia ...

  5. java 生成客户端代码_swagger-codegen生成java客户端代码

    前后端分离的时候,需要建立契约,Swagger可达到该目的(略). 建立Rest接口后,通过swagger-codegen项目可以自动生成对应的客户端代码(c++.php.java.js.node等等 ...

  6. java 测试用例核心代码_核心Java测验

    java 测试用例核心代码 Welcome to Core Java Quiz. Java is an object-oriented programming language. 欢迎来到Core J ...

  7. java好的代码_做java软件工程师,怎样才能写出好的代码?

    原标题:做java软件工程师,怎样才能写出好的代码? Java代码之于java程序员而言就是左膀右臂,java代码写的好的java程序员明显更是企业的欢迎,一个优秀的java程序员的考核标准之一也是看 ...

  8. java android程序代码_用java 代码读取android应用的一些基本信息

    Android 应用现在到处都是,如果下载一个apk , 不借助与其他工具,你能得到这个应用的版本号,包名入口等信息吗.其实我们完全可以自己写段 java 代码来得到这些信息.下面是测试代码:pack ...

  9. java4android代码_Android逆向-java代码基础(4)

    [TOC] 0x00 前言 微博:HAI_AI_ZHUZHU I春秋:HAI_ 看这篇可以先看看之前的文章,进行一个了解. Android逆向-java代码基础(1) Android逆向-java代码 ...

最新文章

  1. ehlib 用法记录
  2. Tiny4412裸机程序,按键检测(轮询方式)
  3. 深入理解JVM(5) : Java垃圾收集器
  4. A - Sliding Window POJ - 2823
  5. 从数学到密码学(八)
  6. 轮播图高度自适应_【2020顶会NIPS】用于交通预测的自适应图卷积循环网络
  7. 测试h265和h264的编码效果
  8. win10查看激活时间(Win10查看激活信息)
  9. 利用服务器在家远程登录办公室电脑
  10. 高性能核心板IDO-SOM3908-V1:接口丰富,性能更强,速度更快!
  11. linux卸载phpstudy_centos
  12. TCP/IP中的拥塞窗口控制机制
  13. CSDN勤写标兵勋章获取方法
  14. Excel可视化(2):13个变种图使用技巧
  15. 红队快速打点工具(POC bomber)
  16. 深度学习与计算机视觉-6章 Python-OpenCV
  17. bus hound 使用介绍
  18. 如何监控和保护Linux下进程安全
  19. 鲁大师性能测试要装什么软件吗,鲁大师怎么给电脑跑分?赶快看看你的电脑性能如何吧!...
  20. 小马识途谈如何利用全网营销打造营销闭环

热门文章

  1. 如何解决C盘空间不足的问题?
  2. 小清新简单网页设计制作模板免费下载
  3. 软键盘设计的实现与代码分享(TP900掌机)
  4. 二维码生成代码(Java)
  5. 【深度学习数据标注处理】标注标签处理的工具,和坐标转换集锦
  6. 华为畅享9计算机在哪里,华为畅享9nfc功能在哪
  7. java hibernate 下载,Download the Hibernate Tools
  8. android 自定义多tab悬浮控件,Android编程实现自定义Tab选项卡功能示例
  9. 算法设计——最优二叉树搜索问题
  10. 北大数学系毕业,放弃MIT offer,嫌月薪3万太多主动降薪…