java.text.ParseException
是 Java 中常见的异常之一,通常在解析字符串为日期时间格式时发生错误。你遇到的错误信息表明在尝试解析日期字符串 ["2021-05-03 18:01:42"]
时,Java 无法识别其中的时区指示符。
SimpleDateFormat
或 DateTimeFormatter
(Java 8 及以上版本推荐使用)来解析和格式化日期时间字符串。SimpleDateFormat
默认使用系统的默认时区。如果系统时区设置不正确,或者期望的时区与系统时区不一致,就会导致解析失败。以下是几种解决这个问题的方法:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class DateParser {
public static void main(String[] args) {
String dateStr = "2021-05-03 18:01:42";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC")); // 设置为 UTC 时区
try {
Date date = sdf.parse(dateStr);
System.out.println("Parsed Date: " + date);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
DateTimeFormatter
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class DateParser {
public static void main(String[] args) {
String dateStr = "2021-05-03 18:01:42";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.parse(dateStr, formatter);
ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.of("UTC")); // 设置为 UTC 时区
System.out.println("Parsed Date: " + zonedDateTime);
}
}
确保你的系统时区设置正确,或者在代码中显式指定时区。
这种解析错误常见于需要处理跨时区数据的系统中,例如国际化应用、全球分布的数据处理系统等。
通过明确指定时区或使用更现代的日期时间处理库(如 Java 8 的 java.time
包),可以有效避免 ParseException
并确保日期时间解析的准确性。希望这些解决方案能帮助你解决问题。
领取专属 10元无门槛券
手把手带您无忧上云