GSon会弄乱Timestamp变量吗?

时间:2013-02-18 15:10:42

标签: java timestamp gson

我试图通过套接字发送一个类,这一切都运行正常。但是,其中一个变量因为没有明显原因而搞砸了。让我进一步解释。

我使用的代码如下(对于客户端套接字,其中创建了GSon):

while(!someQueueVariable.isEmpty()){
     QueryHolder h = this.someQueueVariable.poll();
     Gson g = new Gson();
     String send = g.toJson(h);
     out.println(send);
}

QueryHolder是一个包含两个Strings和一个Object[]的简单类。

我试过Netbeans'内置调试器,这些变量存在: Variables 用蓝色突出显示的那些是你应该看的。如您所见,首先是一个值为2013-02-18 15:49:36.415的Timestamp对象,该对象变为Feb 18, 2013 3:49:36PM。我在这里做错了吗?它是GSon中的一个错误吗?

2 个答案:

答案 0 :(得分:11)

在讨论创建自定义序列化程序/反序列化程序时,Gson User's Guide提到了这一点。您所看到的是java.sql.Timestamp对象(它是Date的子类)的默认序列化,它将以您的语言环境的格式输出/格式化它。

如果查看Javadoc for GsonBuilder(),您会找到专门针对您的问题创建的setDateFormat()方法 - 它不再需要自定义序列化程序。您只需要在JSON中提供所需的模式:

public static void main(String[] args)
{
    Timestamp t = new Timestamp(System.currentTimeMillis());
    System.out.println(t);
    System.out.println(t.toLocaleString());
    String json = new Gson().toJson(t);
    System.out.println(json);
    json = new GsonBuilder()
               .setDateFormat("yyyy-MM-dd hh:mm:ss.S")
               .create()
               .toJson(t);

    System.out.println(json);
}    

输出(截至目前,显然):

  

2013-02-18 11:32:21.825
  2013年2月18日上午11:32:21   “2013年2月18日上午11:32:21”
  “2013-02-18 11:32:21.825”

答案 1 :(得分:2)

  

2013-02-18 15:49:36.415,于2013年2月18日下午3:49:36进入

和这些不同怎么样?这看起来像渲染问题,您的时间戳正通过SimpleDateFormat或类似的方式转换为字符串。