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:30
由offset, 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
我得到了如下时间戳,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:30
由offset, 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