我的json响应包含创建日期日期:
{
"CreatedOn" : "\/Date(1406192939581)\/"
}
我需要将CreatedOn转换为简单的日期格式,并计算从CreatedOn Date到Present Date之间的天数差。
当我调试下面的代码字符串CreatedOn时,显示一个空值。为什么?
JSONObject store = new JSONObject(response);
if (response.contains("CreatedOn"))
{
String CreatedOn = store.getString("CreatedOn");
}
3条答案
按热度按时间disbfnqx1#
或
考虑使用JSON方法而不是contains。JSON有“has()”来验证密钥是否存在。
您还应该确保首先尝试{} catch {} String,以确保其JSON有效。
更新:
您的值为/日期(1406192939581)/
这意味着必须先设置它的格式。通过使用
q9yhzks02#
java.时间
现在是时候有人提供现代的答案了。当这个问题在2014年被问到的时候,Java 8刚刚发布,随之而来的是java.time,现代的Java日期和时间API。今天我建议我们都使用它,避免使用旧的类
Timestamp
,Date
,DateFormat
和SimpleDateFormat
。旧的类设计得很差,被替换是有原因的。**编辑:**在Java 8中,您可以使用高级格式化程序直接将字符串从JSON解析为
Instant
,我认为这非常优雅:此代码段的输出为:
创建日期:2014年7月24日09:08:59.581Z
格式化程序知道最后3位数是秒的毫秒数,并考虑自epoch以来的所有前面的位数秒数,因此它以应有的方式工作。要计算从CreatedOn Date到Present Date的天数差:
今日产量(2019-12-20):
差异天数:1975
如果不是南极洲/South_Pole,请替换您想要的时区。
原始答案:
输出为:
创建日期:2014年7月24日09:08:59.581Z
我使用正则表达式不仅是为了从字符串中提取数字,而且也是为了验证字符串。
现代的
Instant
类表示一个时间点,它的toString
方法以UTC表示时间,所以这就是您在输出中看到的内容,由尾随的Z
表示。链接:Oracle tutorial: Date Time,说明如何使用java. time。
oogrdqng3#
*java.时间 *
java.util
的日期-时间API和它们的格式化APISimpleDateFormat
已经过时且容易出错,建议完全停止使用它们,改用modern date-time API。Instant#ofEpochMilli
这里的关键是从JSON字符串中的毫秒中得到一个
Instant
的对象。一旦你得到了Instant
,你就可以把它转换成其他的java.time types,比如ZonedDateTime
,甚至是遗留的java.util.Date
。关于正则表达式
\D+
的注解:\D
指定non-digit,而+
指定其one or more出现。示范:
输出:
从**Trail: Date Time**了解有关现代日期-时间API的更多信息。
如何从
Instant
获取java.util.Date
:您应该避免使用
java.util.Date
,但无论出于何种目的,如果您想获得java.util.Date
,您所要做的就是使用Date#from
,如下所示: