Java中将2021-10-13 11:33:16.000-04字符串转为Date对象的解决方法
Java 带单数字时区偏移的日期字符串解析方案
异常原因
你使用的ZZ模式符仅支持匹配带分钟的4位时区偏移格式(例如-0400),而待解析字符串中的时区仅为小时位-04,格式不匹配因此抛出解析异常。
正确解决方案
方案1:使用SimpleDateFormat(兼容低版本Java)
使用X模式符匹配ISO 8601标准的单小时时区偏移即可,代码示例:
SimpleDateFormat inFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSX"); Date date = inFormatter.parse("2021-10-13 11:33:16.000-04");
注意:SimpleDateFormat是线程不安全类,多线程场景下需单独实例化或加锁使用。
方案2:使用java.time包(推荐,Java 8+支持)
Java 8及以上版本优先使用线程安全的java.time类处理日期转换,代码示例:
import java.time.OffsetDateTime; import java.time.format.DateTimeFormatter; import java.util.Date; // 定义格式化规则 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSX"); // 解析为OffsetDateTime对象 OffsetDateTime offsetDateTime = OffsetDateTime.parse("2021-10-13 11:33:16.000-04", formatter); // 如需转换为java.util.Date对象 Date date = Date.from(offsetDateTime.toInstant());
内容的提问来源于stack exchange,提问作者Dmitriy Ryabin
相关产品推荐
相关产品推荐

