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

使用SimpleDateFormat解析CSV日期抛ParseException,但日期格式看似正常

问题分析与解决方案

从你给出的异常信息com.codename1.l10n.ParseException: Unparseable string 2010鈥�2鈥�8可以看出,核心问题是CSV文件的字符编码与CSVParser解析时使用的编码不匹配,导致原本日期里的-(短横线)被解析成了乱码字符鈥�,最终让SimpleDateFormat无法识别这个格式错误的日期字符串。

解决步骤:

  • 第一步:确认CSV文件的实际编码
    你可以用文本编辑器(比如Notepad++)打开CSV文件,查看它的编码格式(常见的有UTF-8、UTF-8 with BOM、GBK、ISO-8859-1等)。

  • 第二步:指定CSVParser使用正确的编码解析
    CSVParser默认可能使用了系统默认编码或者某个固定编码,你需要调用它的重载构造方法,传入指定编码的Reader来解析文件。比如如果你的CSV是UTF-8编码,代码可以改成这样:

    // 假设inputStream是你的CSV文件输入流
    InputStreamReader reader = new InputStreamReader(inputStream, "UTF-8");
    CSVParser parser = new CSVParser(reader);
    // 后续解析逻辑不变
    

    如果是Codename One特有的编码常量,也可以用com.codename1.io.Util里的编码定义,比如Util.UTF8。

  • 临时补救方案(不推荐作为长期解决办法)
    如果暂时无法确认编码,也可以先对解析出的日期字符串做清理,替换掉乱码字符再解析:

    String dateStr = data[i][0].replaceAll("[^0-9]", "-"); // 保留数字,其他替换成短横线
    // 再做去重处理,比如把多个连续的-换成单个
    dateStr = dateStr.replaceAll("-+", "-");
    Date tmpData = sdf2.parse(dateStr);
    

    但这个方法可能会处理掉其他有用的字符,所以优先推荐从编码匹配入手解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:56:03