JSON date to Java date?
本问题已经有最佳答案,请猛点这里访问。
我在任何地方都找不到这个。我从返回标准JSON日期的API中获取一些JSON。您可以通过在javascript控制台中运行此代码来查看格式:
1 2 |
实际上,我正在使用的API并没有返回毫秒部分,有时它返回时区而不是
2010-10-27T11:58:22Z 2010-10-27T11:58:22+03:00
解析这些日期有点麻烦。有没有办法用
我目前的解决方案是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public static Date parseDateTime(String dateString) { if (dateString == null) return null; DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ"); if (dateString.contains("T")) dateString = dateString.replace('T', ' '); if (dateString.contains("Z")) dateString = dateString.replace("Z","+0000"); else dateString = dateString.substring(0, dateString.lastIndexOf(':')) + dateString.substring(dateString.lastIndexOf(':')+1); try { return fmt.parse(dateString); } catch (ParseException e) { Log.e(Const.TAG,"Could not parse datetime:" + dateString); return null; } } |
呸!
日期时间格式实际上是ISO 8601日期时间。JSON没有为日期/时间指定任何特定的格式。如果你有一点谷歌,你会发现很多实现在Java中解析它。
这里有一个
如果您愿意使用除了Java的内置日期/时间/日历类之外的其他东西,我也建议JoDA时间。它们提供(在许多方面)一个
请注意,simpledateformat格式模式z用于RFC 822时区,模式x用于ISO 8601(此标准支持单字母时区名称,如z用于zulu)。
因此,
不幸的是,据我所知,您无法使用此格式为zulu版本生成z,这很烦人。
实际上,在JavaScript方面,我在处理这两种格式时遇到了更多的麻烦。
如果您需要支持多个格式,则必须对输入进行模式匹配,并相应地进行分析。
1 2 3 4 5 6 | final DateFormat fmt; if (dateString.endsWith("Z")) { fmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); } else { fmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); } |
我猜你正在处理的API中的一个错误引用了