`
RednaxelaFX
  • 浏览: 3052504 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

Gson使用中遇到的Date格式问题

    博客分类:
  • Java
阅读更多
在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();
分享到:
评论
5 楼 yao88611852 2017-04-21  
beneo 写道
发现google的java项目灰常灰长很喜欢builder出对象出来。。。

effective javal里面讲过用这个来解决构造函数过长的问题
4 楼 mywill 2015-09-25  
感谢分享 
3 楼 wenshao 2011-07-23  
gson的g不是google的缩写,是龟速的缩写!
2 楼 RednaxelaFX 2010-10-20  
beneo 写道
发现google的java项目灰常灰长很喜欢builder出对象出来。。。

嗯,也不坏。像MapMaker之类的用起来相当爽
1 楼 beneo 2010-10-20  
发现google的java项目灰常灰长很喜欢builder出对象出来。。。

相关推荐

    gson使用.doc

    ### gson使用详解 #### 一、简介 Google的Gson库是用于实现Java对象与JSON数据之间相互转换的强大工具。相较于其他同类库如org.json和json-lib,Gson提供了更为简洁且灵活的方法来处理复杂的对象结构,特别是对于...

    gson解析工具类封装

    本文将深入探讨如何封装一个Gson解析工具类,以优雅地处理JSON数据,尤其是避免在解析过程中遇到`String`为`null`时产生的错误。 首先,我们需要引入Gson库。如果你的项目是Maven项目,可以在pom.xml文件中添加以下...

    Gson的使用

    通过这种方式,Gson 在遇到 `CustomDate` 类型的对象时,就会使用我们自定义的序列化和反序列化逻辑。 在处理复杂对象时,比如包含嵌套的对象或者数组,Gson 也能优雅地处理。例如,如果我们有以下的 `Family` 类:...

    Gson解析之自定义序列化和反序列化

    本篇文章将深入探讨如何在使用Gson时进行自定义的序列化和反序列化,以及在遇到后端返回的数据类型与预期不符时的处理策略。 ### Gson自定义序列化 自定义序列化主要是为了在转换Java对象为JSON时,根据特定需求...

    Gson TypeAdapter使用技巧几例:数据免判空、解析后校验、预处理.zip

    在这个`Gson TypeAdapter`使用技巧的例子中,我们将深入探讨如何利用TypeAdapter来优化数据处理,包括数据免判空、解析后校验以及预处理等关键环节。这些技巧对于处理机器学习中的数据预处理尤其重要。 首先,让...

    测试自定义Volley Gson解析

    现在,我们可以在应用中使用`GsonRequest`发送网络请求,并指定需要解析的数据类型。以下是一个简单的示例: ```java String url = "https://api.example.com/data"; GsonRequest<MyDataModel> request = new ...

    json格式转换demo

    在处理JSON时,尤其是在涉及到日期(Date)对象时,可能会遇到一些转换问题。本示例“json格式转换demo”将解决这些常见的问题。 首先,让我们深入了解一下JSON的基本结构。JSON基于JavaScript的一个子集,主要由...

    java如何利用FastJSON、Gson、Jackson三种Json格式工具自定义时间序列化

    Java在处理JSON数据时,经常会遇到时间序列化的问题,特别是在与.NET平台交互时,需要将日期格式转换为特定的格式,如"/Date(1296576000000+0800)/"。这个问题可以通过使用FastJSON、Gson和Jackson这三种流行的JSON...

    java对于Json文件的解析范例

    本文将深入探讨如何使用Java解析JSON文件,包括所需的库、时间戳转换和文件读写操作,以及ArrayList类中可能遇到的问题。 首先,解析JSON文件,我们通常会用到两个流行的Java JSON库:Jackson和Gson。Jackson库提供...

    json基础文档

    - **概念介绍**: 当从文件中读取JSON时,可能会遇到某些字段为空的情况。Gson提供了便捷的方法来处理这种情况。 - **示例代码**: ```java FileReader reader = new FileReader("data.json"); Gson gson = new ...

    解决easyui datagrid控件的日期显示问题1

    在使用EasyUI的datagrid控件时,我们常常会遇到日期数据在前端显示为`object`类型的问题,这主要是因为服务器返回的日期数据没有被正确格式化。在标题和描述中提到的解决方案,主要涉及到以下几个关键点: 1. **...

    JSON LIB转化时间

    通过阅读这篇博客,开发者可以更好地理解如何在Java中使用JSON Lib处理日期和时间,从而提高JSON数据操作的效率和准确性。 在实际项目中,除了JSON Lib,还有其他流行的JSON处理库,如Jackson和Gson,它们也提供了...

    json架包和java对象转json实例

    在给定的压缩包文件中,可能包含了以上所述的示例代码,用于演示如何在Java中使用JSON库进行对象转换,以及如何处理可能出现的问题。通过这些实例,开发者可以更深入地理解JSON操作,并能有效地应用到实际项目中。

    将c#的DateTime类转成java

    在跨平台开发中,经常会遇到将一种编程语言的代码转换为另一种编程语言的情况。本话题主要探讨如何将C#中的`DateTime`类转换为Java代码。`DateTime`是C#中用于表示日期和时间的内置类型,而在Java中,相应的类型是`...

    处理JSON日期转换

    在处理JSON数据与Java对象之间的转换时,常常会遇到日期格式不匹配的问题。JSON标准并未规定日期的特定格式,导致在不同的系统间进行数据交换时可能会出现解析异常。本问题中,开发人员自定义了一个名为`JsonUtil`的...

    JSON标配包及其依赖

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web服务和应用程序之间的数据传输。...同时,为了确保程序的稳定运行,理解并掌握这些库的使用方法和常见问题的解决策略是至关重要的。

    100 Recipes for Programming Jav - Jamie Munro

    - **解释**: 介绍了如何使用Apache HttpClient来处理与服务器之间通信过程中遇到的无效SSL证书问题。这通常涉及到信任管理器的配置和SSL上下文的设置。 ##### 食谱20: Java中日期时间的转换 - **知识点**: 日期时间...

    Android--聊天界面的实现安卓经典UI效果.rar

    - 根据消息的发送时间戳,使用`Date`和`SimpleDateFormat`格式化时间字符串。 - 为了优化用户体验,可以使用`DiffUtil`计算消息之间的差异,只显示非连续的时间戳。 9. **UI动画**: - 添加消息发送后的滑动动画...

    Java笔记word.docx

    在实体类中定义时间字段时,可以使用`@JsonFormat`注解来指定日期格式化规则。 **示例**: ```java @Data public class User { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date...

    JSON jar包

    在Java中,我们常常会遇到需要将数据转化为JSON格式进行传输的情况,例如将Java对象序列化为JSON字符串,或将接收到的JSON字符串反序列化为Java对象。这个JSON jar包提供了一整套工具来实现这些功能。 1. **JSON...

Global site tag (gtag.js) - Google Analytics