【问题标题】:Json Date to Java Date and back to Json DateJson 日期到 Java 日期并返回到 Json 日期
【发布时间】:2012-06-07 14:10:28
【问题描述】:

我在这里查看了所有可能的答案,但我很难弄清楚这件事。

我在字符串中有 Json 日期。我想在不浪费时间的情况下转换为 Java 日期。

我还想将 Java Date 转换为 Json Date 字符串。

这就是我所拥有的。

String jsonDateString = "/Date(1295157600000-0600)/";

【问题讨论】:

    标签: java json date


    【解决方案1】:

    您的时间有两部分:以毫秒为单位的本地时间,以及以小时和分钟为单位的偏移量。您必须解析它们并“添加”它们以获得毫秒 UTC。

    你可以用这个函数来做:

    private static Pattern p = Pattern.compile("\\((\\d+)([+-]\\d{2})(\\d{2})\\)");
    public static Date jd2d(String jsonDateString) {
        Matcher m = p.matcher(jsonDateString);
        if (m.find()) {
            long millis = Long.parseLong(m.group(1));
            long offsetHours = Long.parseLong(m.group(2));
            long offsetMinutes = Long.parseLong(m.group(3));
            if (offsetHours<0) offsetMinutes *= -1;
            return new Date(
                millis
                + offsetHours*60l*60l*1000l
                + offsetMinutes*60l*1000l
            );
        }
        return null;
    }
    

    要“返回”一个 JSON 日期,我只需对 UTC 时间进行编码:

    String jsonDate = "/Date("+date.getTime()+"+0000)/";
    

    【讨论】:

    • 你用示例字符串试过了吗?
    • 不确定-0600?这就是偏移量,不幸的是被称为“JSON 日期”的一个完全被接受的部分。哦,我多么讨厌这个词!为什么会出现这种可怕的格式? ISO 8601 有什么问题或只是简单的毫秒! OH THE HORROR! OH MY EYES!!
    • 谢谢大家。通过使用dystroy的建议,我能够转换为Long。我应该更清楚我的问题。我从 WCF REST 服务获得的这个 json 日期。我还查看了日期的“-0600”,它是时区偏移量。由于我使用的是dystroy的解决方案,有没有办法也可以保留时区信息?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 2021-01-23
    • 2016-09-23
    • 1970-01-01
    相关资源
    最近更新 更多