You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Locale将字符串转为Date时持续报错,寻求问题排查方案

排查字符串转Date报错的常见问题

嘿,我看了你贴的代码,咱们一步步拆解可能踩的坑:

1. 输入字符串和格式模式不匹配(最常见原因)

你的SimpleDateFormat模式是"EEE, MMM d, yy hh:mm a",搭配Locale.ENGLISH,输入字符串必须严格对应这个格式:

  • 星期必须是英文缩写:比如Mon/Tue,不能是中文或全拼
  • 月份必须是英文缩写:比如Jan/Jul,不能是数字或中文
  • 年份是两位的yy:输入得是24而非2024,如果是四位年份要把模式改成yyyy
  • 时间是12小时制的hh,必须搭配AM/PM标识:如果输入的是24小时制时间(比如14:30),得把hh换成HH,同时去掉a

举个符合格式的正确输入示例:"Wed, Jul 3, 24 02:45 PM"

2. 输入字符串有多余/缺失的符号

比如逗号前后多了空格("Wed, Jul 3, 24...")、少了逗号("Wed Jul 3, 24..."),或者日期带后缀(比如3rd而非3),这些都会导致解析失败。

3. 代码逻辑的小瑕疵

你现在不管解析成功与否,最后都会执行eventTime.setText(date.toString());——如果解析失败,date还是初始的当前时间对象,这会误导你以为解析成功了。建议调整代码:

Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("EEE, MMM d, yy hh:mm a", Locale.ENGLISH);
try {
    date = format.parse(m.getEventTime());
    eventTime.setText(date.toString()); // 只有解析成功才设置文本
} catch (ParseException e) {
    e.printStackTrace();
    String errorTime = m.getEventTime();
    Log.d("Response.Error.Date", errorTime);
    eventTime.setText("时间解析失败:" + errorTime); // 给用户明确提示
}

4. 时区信息的遗漏(可能性较低)

如果你的输入字符串带时区(比如"Wed, Jul 3, 24 02:45 PM EST"),但模式里没包含时区标识z,也会报错,这时候要把模式改成"EEE, MMM d, yy hh:mm a z"。

要是能把Log.d输出的m.getEventTime()具体内容贴出来,我能更精准地帮你定位问题!

内容的提问来源于stack exchange,提问作者nats

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:15:30