Java中无法解析格式为`Sun Apr 10 21:26:54 +05:30 2022`的日期字符串
解决SimpleDateFormat解析带中间时区偏移的日期字符串问题
你的解析失败主要有两个原因,对应调整即可解决:
- 小时格式符错误:你用的
hh是12小时制格式,但目标日期里的21是24小时制,必须换成HH - 时区格式符不匹配:带冒号的时区偏移(如
+05:30)需要用XXX来匹配,X仅支持不带冒号的偏移或单字符时区标识,Z也只匹配不带冒号的四位偏移(如+0530)
正确的日期模式为:E MMM dd HH:mm:ss XXX yyyy
另外注意必须指定英文Locale,避免系统默认非英文环境下无法解析英文的星期、月份名称,示例代码如下:
import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class ExifDataExtractor { public static void main(String[] args) throws Exception { String dateStr = "Sun Apr 10 21:26:54 +05:30 2022"; SimpleDateFormat sdf = new SimpleDateFormat("E MMM dd HH:mm:ss XXX yyyy", Locale.ENGLISH); Date parsedDate = sdf.parse(dateStr); System.out.println(parsedDate); } }
运行这段代码即可成功解析目标日期字符串,不会再抛出ParseException。
内容的提问来源于stack exchange,提问作者NothingIsIrrational
相关产品推荐
相关产品推荐

