0

我的 Web 服务返回日期

"dateRequired": "/Date(1357101103000+0530)/",
"etaExport": "/Date(-6847824600000+0530)/",
"etaImport": "/Date(-6847824600000+0530)/",

作为一个 json 。我想知道将这些 un​​ix 日期转换为 DD-MM-YYYY HH:MM 格式的最佳方法,并想限制“/Date”和“/”。什么是最好和最有效的方法?

4

2 回答 2

5

这些数字看起来像自大纪元以来的毫秒数,后跟时区指示符,这很奇怪,因为通常如果您在大纪元以来的毫秒数(或秒数),则表示日期/时间为 UTC。因此,您要做的第一件事是查看 Web 服务的文档并找出数字的含义。

然后就是使用正则表达式(或仅String#substring)来提取数字,Long.parseLong将它们变成一个长的,实例化一个Date对象(例如,new Date(longNumber)),并处理 Web 服务期望您执行的任何时区数学运算。对于最后一点,在 JDK 中你会想要一个Calendar.,或者如果你想要更容易使用和更强大的东西,很多人都喜欢JodaTime

于 2013-04-02T07:38:31.760 回答
1

嗨虽然上面的答案是正确的,但作为替代方案,您可以使用以下方法

首先使用以下方法从 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 "";
}

如前所述,这是一种替代方法,而不是正确的方法。虽然如果有人想重构这个,请大家随时欢迎。

谢谢

于 2014-01-22T22:55:27.453 回答