Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create()
在Java中处理JSON格式的数据时,Google Gson 是个不错的选择,用起来挺方便的,也有一定灵活性。我现在工作中在参与的两个项目里都有用它。不过它在处理Date格式时有个小陷阱,在不同环境中部署时可能会遇到问题。
Gson默认处理Date对象的序列化/反序列化是通过一个SimpleDateFormat对象来实现的,通过下面的代码去获取实例:
- DateFormat.getDateTimeInstance()
在不同的locale环境中,这样获取到的SimpleDateFormat的模式字符串会不一样。
例如说,在我的开发机是Windows XP SP3,zh_CN.GBK,模式字符串是:
- "yyyy-M-d H:mm:ss"
而在我们的一台测试服务器上,RHEL 5.4,en_US.UTF-8,模式字符串则是:
- "MMM d, yyyy h:mm:ss a"
这就使得同样的Date对象通过Gson来序列化为JSON后内容不同。例如说要序列化的日期是2010-08-19 16:13:57,那么在我的开发机上得到的是:
- "2010-8-19 16:13:57"
而在那台测试服务器上则是:
- "Aug 19, 2010 4:13:57 PM"
这就……郁闷了。在一边序列化的内容在另一边会反序列化失败。
为了避免使用Gson时遇到locale影响Date格式的问题,使用GsonBuilder来创建Gson对象,在创建过程中调用GsonBuilder.setDateFormat(String)指定一个固定的格式即可。例如:
- Gson gson = new GsonBuilder()
- .setDateFormat("yyyy-MM-dd HH:mm:ss")
- .create();
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create()的更多相关文章
- 小程序日期格式(yyyy-MM-dd HH:mm:ss)转(yyyy/MM/dd HH:mm:ss)
let newDate = (date).replace(/-/g, '/'); var date = new Date(newDate).getTime();
- Oracle中把一个DateTime的字符串转化成date类型。to_date('2016/12/8 18:55:43','yyyy/MM/dd hh24:mi:ss'),
Oracle中把一个DateTime或者该形态字符串转化成date类型. to_date('2016/12/8 18:55:43','yyyy/MM/dd hh24:mi:ss'), 或者: sele ...
- java 日期格式转换EEE MMM dd HH:mm:ss z yyyy
SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy", Locale. ...
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
java日期格式大全 format SimpleDateFormat(转) SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH ...
- javascript:针对yyyy-MM-dd hh:mm:ss格式的毫秒转换.
javascript:针对yyyy-MM-dd hh:mm:ss格式的毫秒转换. 时间 2015-11-07 22:18:39 HideHai's blog 原文 http://www.hideh ...
- 火狐低版本中显示时间格式为:yyyy-MM-dd hh:mm:ss,出现NaN
在低版本的火狐(43以下)和IE8中,显示时间格式为:yyyy-MM-dd hh:mm:ss,会出现NaN:原因是只支持yyyy/MM/dd hh:mm:ss; 所以在new Date('2018-0 ...
- js转换时间戳-转换成 yyyy-MM-dd HH:mm:ss
比如:转换成 yyyy-MM-dd HH:mm:ss //时间戳转换方法 date:时间戳数字 function formatDate(date) { var date = new Date(date ...
- Excel日期格式单元格写成yyyy.MM.dd格式将无法读取到DataTable
最近在改公司的订单系统,遇到了一个奇怪的问题.C#程序需要从Excel文件中将数据全部读取到DataTable,其中Excel文件的第一列是日期格式yyyy/MM/dd,而这一列中大部分的单元格都是按 ...
- dd/MMM/yyyy:hh:mm:ss +0800日期格式的转化
private static void myHandler() throws ParseException { String dtime1 = "23/Apr/2019:04:08:00 + ...
随机推荐
- 当你创建了一个 Deployment 时,Kubernetes 内部发生了什么?
我们通常使用 kubectl 来管理我们的 Kubernetes 集群. 当我们需要一个 Nginx 服务时,可以使用以下命令来创建: kubectl create deployment nginx ...
- P4249-[WC2007]剪刀石头布【费用流】
正题 题目链接:https://www.luogu.com.cn/problem/P4249 题目大意 \(n\)个点的竞赛图有的边已经确定了方向,要求给剩下的边确定一个方向使得图的三元环最多. \( ...
- pdb的插拔测试
pdb的插拔测试:将pdb从一个cdb中,插拔到另一个cdb中. 源端pdb unplug SQL> select instance_name from v$instance; INSTANCE ...
- JVM学习笔记——方法区
方法区 Method Area 方法区在逻辑上属于堆的一部分,但可以看做是一块独立于 Java 堆的内存空间.所有的字段和方法字节码,以及一些特殊的方法,如构造函数,接口代码在此定义.所有定义方法的信 ...
- 易华录 X ShardingSphere|葫芦 App 后台数据处理的逻辑捷径
"ShardingSphere 大大简化了分库分表的开发和维护工作,对于业务的快速上线起到了非常大的支撑作用,保守估计 ShardingSphere 至少为我们节省了 4 个月的研发成本.& ...
- Django序列化页和过滤页规范
序列化类:serializers.py from rest_framework import serializers from goods.models import Goods, GoodsCate ...
- 题解 2020.10.24 考试 T4 模板
题目传送门 题目大意 有一个 \(n\) 个点组成的树,有 \(m\) 次操作,每次将 \(1\to x\) 的路径上每个点都加入一个颜色为 \(c\) 的小球.但是每个点都有大小限制,即小球个数超过 ...
- 1002 写出这个数 (20 分) java解题
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 10^100. 输出格式: 在一行内输 ...
- 5分钟让你掌握Vuex,深入浅出
5分钟让你掌握Vuex,深入浅出 一.什么是Vuex? 概念:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预 ...
- 【UE4 材质】一些小功能
利用材质实现物体自转 物体外轮廓高亮 使用postprocess+custom depth(防遮挡) https://www.tomlooman.com/soft-outlines-in-ue4/ h ...