将Json日期转换为Java日期,再将其转换回Json日期

3

我看过所有可能的答案,但是我还是很难弄清楚这件事。

我有一个存储在字符串中的Json日期。我想将其转换为Java日期,而不丢失时间信息。

同时,我也想将Java日期转换为Json日期字符串。

以下是我的代码:

String jsonDateString = "/Date(1295157600000-0600)/";
1个回答

2

您的时间有两个部分:本地时间(以毫秒为单位)和时区偏移量(以小时和分钟为单位)。您需要解析它们并将它们“相加”以获取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;
}

要将“back”转换为JSON日期,我只需对UTC时间进行编码:
String jsonDate = "/Date("+date.getTime()+"+0000)/";

你尝试使用示例字符串了吗? - Jon Skeet
1
不确定-0600是什么意思?那是偏移量,它是所谓的“JSON日期”的一个完全被接受的部分。我多么讨厌这个术语!为什么会出现这种可怕的格式?ISO 8601或普通的毫秒时间戳有什么问题吗?哦,真恐怖!我的眼睛!! - Ray Toal
谢谢大家。通过使用dystroy的建议,我能够转换为Long类型。我应该在我的问题上更加清楚。这个JSON日期是我从WCF REST服务获取的。我还查看了日期中的“-0600”,它是时区偏移量。由于我正在使用dystroy的解决方案,是否有办法也保留时区信息? - All Time Learner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接