Java,从单独的JSON值到字符串到日期的日期

时间:2011-07-09 01:43:19

标签: java sql json date simpledateformat

我有一个JSON对象被返回到我的应用程序,其中包含一个日期

date": {
"year": 2011,
"month": 5,
"dayOfMonth": 30,
"hourOfDay": 16,
"minute": 13,
"second": 47
},

我需要使用这个日期并将其存储在SQL数据库中,最有可能是一个字符串,所以我使用Java中的JSON函数解析这个日期对象

这里我试图将整个部分格式化为一个字符串,在日期和冒号之间用短划线表示小时分钟秒。希望我可以使用SimpleDateFormat解析它,但是使用parserexceptionerror失败

dataObj.getJSONObject("dateObject").getString("year") + "-" +
dataObj.getJSONObject("dateObject").getString("month") + "-" +
dataObj.getJSONObject("dateObject").getString("dayOfMonth") + " " +
dataObj.getJSONObject("dateObject").getString("hourOfDay") + ":" +
dataObj.getJSONObject("dateObject").getString("minute") + ":" +
dataObj.getJSONObject("dateObject").getString("second");

最好的方法是什么?

我需要获取JSON字符串并将它们组合成一个可读日期,理想情况下我可以将其转换为字符串。这可以是格式化日期 - 例如simpledateformat将执行的操作,或者可以是毫秒。

洞察力赞赏

2 个答案:

答案 0 :(得分:1)

如果您还没有,那么您应该看一下使json序列化和反序列化更容易的JSON库。 Jackson和Google的GSON都非常出色。

JSON库知道如何将日期JSON字符串读入java.util.Date对象。然后,您可以将其存储在datetime列中的数据库中。将日期存储为数据库中正确的日期时间数据类型的优点是,您可以更轻松地构建查询 - 例如,如果您需要选择两个日期之间的所有记录。如果那是一个字符串列,您的查询将很快变得丑陋。关于datetime的另一件事是它存储在一个固定长度的列中(在许多数据库实现中存储毫秒的长值),因此存储是有效的。如果您开始计算完整的SimpleDateFormat-ed字符串中的所有字符,则存储为字符串可以轻松占用更多空间。因此,在日期时间构建索引会变得更有效,可以在不同长度的字符串列上构建索引。

答案 1 :(得分:1)

假设目标是将日期信息的字符串表示(例如格式化为“2011-5-30 16:13:47”)转换为java.util.Date实例...

String dateString = "2011-5-30 16:13:47";
Date date = new SimpleDateFormat("yyyy-M-dd HH:mm:ss").parse(dateString);
System.out.println(date);
// output: Mon May 30 16:13:47 MST 2011

String dateString2 = "2011-11-3 16:13:47";
Date date2 = new SimpleDateFormat("yyyy-M-dd HH:mm:ss").parse(dateString2);
System.out.println(date2);
// output: Thu Nov 03 16:13:47 MST 2011

另一种方法是将所有JSON输入值转换为Java int,然后使用Calendar.getInstance().set(year + 1900, month, date, hrs, min, sec).getTime()