我的 Web 服务返回日期
"dateRequired": "/Date(1357101103000+0530)/",
"etaExport": "/Date(-6847824600000+0530)/",
"etaImport": "/Date(-6847824600000+0530)/",
作为一个 json 。我想知道将这些 unix 日期转换为 DD-MM-YYYY HH:MM 格式的最佳方法,并想限制“/Date”和“/”。什么是最好和最有效的方法?
我的 Web 服务返回日期
"dateRequired": "/Date(1357101103000+0530)/",
"etaExport": "/Date(-6847824600000+0530)/",
"etaImport": "/Date(-6847824600000+0530)/",
作为一个 json 。我想知道将这些 unix 日期转换为 DD-MM-YYYY HH:MM 格式的最佳方法,并想限制“/Date”和“/”。什么是最好和最有效的方法?
这些数字看起来像自大纪元以来的毫秒数,后跟时区指示符,这很奇怪,因为通常如果您在大纪元以来的毫秒数(或秒数),则表示日期/时间为 UTC。因此,您要做的第一件事是查看 Web 服务的文档并找出数字的含义。
然后就是使用正则表达式(或仅String#substring
)来提取数字,Long.parseLong
将它们变成一个长的,实例化一个Date
对象(例如,new Date(longNumber)
),并处理 Web 服务期望您执行的任何时区数学运算。对于最后一点,在 JDK 中你会想要一个Calendar
.,或者如果你想要更容易使用和更强大的东西,很多人都喜欢JodaTime。
嗨虽然上面的答案是正确的,但作为替代方案,您可以使用以下方法
首先使用以下方法从 json 中提取长日期时间。
String JsonDate = jsonGroup.getString("Date");
int idx1 = JsonDate.indexOf("(");
int idx2 = JsonDate.indexOf("+");
if (idx1 > 0 && idx1 < idx2 && idx2 < JsonDate.length()) {
String s = JsonDate.substring(idx1 + 1, idx2);
}
一旦有了日期,您就可以将 Long 转换为 Date
if (!s.equalsIgnoreCase("null")) {
Long date1 = Long.parseLong(s);
Date dt1 = new Date(date1);
holder.TxtPunchoutDate.setText(getDateCurrentTimeZone(dt1));
}
并将起始日期设置为 UTC,然后将其转换回本地时间,如下所示
public static String getDateCurrentTimeZone(Date dt) {
try {
//Convert DATE to UTC DATETIME
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"MMM dd yyyy hh:mm:ss aa ");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
//simpleDateFormat.setTimeZone(TimeZone.getDefault());
//Convert to LocalDATE from UTC
Date fromGmt = new Date(dt.getTime() + TimeZone.getDefault().getOffset(dt.getTime()));
return new SimpleDateFormat("MMM dd yyyy hh:mm:ss aa").format(fromGmt).toString();
} catch (Exception e) {
}
return "";
}
如前所述,这是一种替代方法,而不是正确的方法。虽然如果有人想重构这个,请大家随时欢迎。
谢谢