SimpleDateFormat 没有正确格式化偏移日期时间

SimpleDateFormat not formatting offset date time correctly

我得到了如下时间戳,2019-10-17T07:10:39.021+10:30 但是当我解析 SimpleDateFormat 然后再次打印时,它显示为 2019-10-17T07:40:39.021+11 :00

看起来它增加了 30 分钟的时间,然后更改了时区。有没有办法解决这个问题。

        Date date = null;       
        String value = "2019-10-17T07:10:39.021+10:30";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.getDefault());       
        System.out.println("input :" + value);
        try {
            date = sdf.parse(value);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println("output :" + sdf.format(date));

结果

输入:2019-10-17T07:10:39.021+10:30

输出:2019-10-17T07:40:39.021+11:00

应与输入相同。

为什么要使用 Locale.getDefault(),该参数不是必需的。你能试着像下面这样称呼它吗,

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");

您的日期字符串2019-10-17T07:10:39.021+10:30offset, so from java-8 you can use OffsetDateTime

组成

A date-time with an offset from UTC/Greenwich in the ISO-8601 calendar system, such as 2007-12-03T10:15:30+01:00.

OffsetDateTime dateTime = OffsetDateTime.parse(date);

System.out.println(dateTime.toString());   //2019-10-17T07:10:39.021+10:30