ParseException: Unparseable date: "2017-09-09 17:54:13" (at offset 19)

本文介绍了一种在Java中处理时间格式化异常的方法,并通过修改代码成功解决了问题。通过使用SimpleDateFormat类并调整parse方法的调用方式,实现了对创建日期的正确解析,并计算出了相对时间。

    在进行时间转化过程中,出现了这个异常代码如下所示:

   

SimpleDateFormat formatter    =   new    SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date curDate    =   new    Date(System.currentTimeMillis());//获取当前时间
        SimpleDateFormat format    =   new    SimpleDateFormat("yyyy-MM-dd");
        long lTime2 = 0;

        try {
            String s = createtime.split(" ")[0];
            Date date = format.parse(s);
            lTime2= date.getTime();
            int day =(int) (curDate.getTime() - lTime2) / 1000 / 60 / 60 / 24;
            Log.e(TAG, "setTime: day========="+day);
            if (day==0){
                String time = createtime.split(" ")[1];
                holder.time_text.setText(time);
            }else if(day==1){
                holder.time_text.setText("昨天");
            } else if(day==2){
                holder.time_text.setText("前天");
            }else{
                String time = createtime.split(" ")[0];
                holder.time_text.setText(time);
            }
        } catch (Exception e) {
            Log.e(TAG, "setTime: day========="+e);
            e.printStackTrace();
        }
更改为:
SimpleDateFormat formatter    =   new    SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date curDate    =   new    Date(System.currentTimeMillis());//获取当前时间
        SimpleDateFormat format    =   new    SimpleDateFormat("yyyy-MM-dd");
        long lTime2 = 0;

        try {
            String s = createtime.split(" ")[0];
            Date date = (Date)format.parseObject(s);
            lTime2= date.getTime();
            int day =(int) (curDate.getTime() - lTime2) / 1000 / 60 / 60 / 24;
            Log.e(TAG, "setTime: day========="+day);
            if (day==0){
                String time = createtime.split(" ")[1];
                holder.time_text.setText(time);
            }else if(day==1){
                holder.time_text.setText("昨天");
            } else if(day==2){
                holder.time_text.setText("前天");
            }else{
                String time = createtime.split(" ")[0];
                holder.time_text.setText(time);
            }
        } catch (Exception e) {
            Log.e(TAG, "setTime: day========="+e);
            e.printStackTrace();
        }
显示效果如下:

时间格式化异常已解决! 如果以上能帮助到你,记得点个赞!谢谢!

         

### 无法解析日期字符串问题的解决方案 在Java中,`java.text.ParseException: Unparseable date` 异常通常发生在使用 `SimpleDateFormat` 解析日期字符串时,提供的日期格式与实际输入的日期字符串不匹配。为了解决该问题,需要确保以下几点: 1. **明确日期格式**:日期字符串的格式必须与 `SimpleDateFormat` 指定的模式完全一致[^1]。 2. **清理非法字符**:如果输入的日期字符串包含多余或非法字符(如空格、特殊符号等),需要在解析前进行清理[^3]。 3. **异常处理**:通过捕获 `ParseException` 异常并输出详细信息,可以定位问题所在[^4]。 以下是针对 `Unparseable date: "2025-06-11"` 的具体解决方案代码示例: ```java import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; public class DateParserExample { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入日期 (格式:yyyy-MM-dd):"); String dateString = scanner.nextLine(); // 使用 nextLine() 获取完整输入 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); dateFormat.setLenient(false); // 设置严格模式,避免非预期日期解析 try { Date date = dateFormat.parse(dateString); System.out.println("解析成功: " + date); } catch (ParseException e) { System.out.println("解析失败,请检查日期格式是否正确 (yyyy-MM-dd)."); e.printStackTrace(); } } } ``` #### 代码说明 - **`SimpleDateFormat` 模式**:`"yyyy-MM-dd"` 是标准的日期格式,适用于 `"2025-06-11"` 这样的字符串[^2]。 - **`setLenient(false)`**:启用严格模式后,`SimpleDateFormat` 不会尝试解析不符合模式的日期[^1]。 - **`nextLine()` 方法**:相比 `next()`,`nextLine()` 能够读取完整的用户输入,避免因空格或其他分隔符导致的错误[^4]。 --- ### 常见问题分析 1. **日期格式不匹配**:如果输入的日期字符串为 `"2025/06/11"`,而模式为 `"yyyy-MM-dd"`,则会抛出 `ParseException`。需确保格式一致。 2. **非法字符**:例如输入 `"2025-06-11T00:00:00"` 或 `"2025-06-11 "`,这些额外字符会导致解析失败[^3]。 3. **区域设置问题**:某些情况下,系统默认的区域设置可能影响日期解析。可以通过 `SimpleDateFormat` 的构造函数指定区域,例如 `new SimpleDateFormat("yyyy-MM-dd", Locale.US)`。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值