Java SimpleDateFormat未正确格式化偏移日期时间
我得到的时间戳如下,2019-10-17T07:10:39.021+10:30,但当我解析SimpleDateFormat然后再次打印时,它显示为2019-10-17T07:40:39.021+11:00 看起来它增加了30分钟的时间,然后改变了时区。有没有办法解决这个问题Java SimpleDateFormat未正确格式化偏移日期时间,java,datetime,simpledateformat,datetime-format,timezone-offset,Java,Datetime,Simpledateformat,Datetime Format,Timezone Offset,我得到的时间戳如下,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"; SimpleDateForma
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");
您拥有的日期字符串由组成,因此在java-8中可以使用 在ISO-8601日历系统(如2007-12-03T10:15:30+01:00)中,从UTC/格林威治偏移的日期时间
虽然您正确地认为
Locale.getDefault()
不是必需的,但删除它无助于解决这种情况。我建议您不要使用SimpleDateFormat
和Date
。这些类设计得很糟糕,而且早已过时,其中前者尤其令人讨厌。只需使用OffsetDateTime
from即可。
OffsetDateTime dateTime = OffsetDateTime.parse(date);
System.out.println(dateTime.toString()); //2019-10-17T07:10:39.021+10:30