将ISO 8601字符串转换为java.util.Date:最佳实践
大家好!我是一名Java初学者,在解析日期时遇到了问题。我需要将ISO 8601格式的字符串(例如"2023-10-05T14:30:00Z"或"2023-10-05T17:30:00+03:00")转换为java.util.Date对象。
问题在于,我使用SimpleDateFormat时经常出错或得到错误结果。例如,字符串"2023-10-05T14:30:00Z"解析不正确,而"2023-10-05T17:30:00+03:00"直接抛出ParseException。这是我的代码:
```java
String dateString = "2023-10-05T14:30:00Z";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
try {
Date date = sdf.parse(dateString);
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
```
我明白末尾的'Z'表示UTC,但SimpleDateFormat似乎没有考虑时区。另外,当我添加偏移量(例如"+03:00")时,格式就乱了。
请问如何正确解析Java中的ISO 8601字符串?也许有现成的