我的时间戳如下,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
应该与输入相同。
答案 0 :(得分:2)
您拥有2019-10-17T07:10:39.021+10:30
的日期字符串由offset组成,因此从java-8开始,您可以使用OffsetDateTime
在ISO-8601日历系统中与UTC /格林威治时间偏移的日期时间,例如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
答案 1 :(得分:0)
为什么要使用Locale.getDefault()
,所以不需要该参数。您可以尝试按如下方式调用它吗?
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");