Android Studio中Java实现时间加分钟遇ParseException问题求助
解决ParseException异常并实现连续时间序列生成
嘿,我来帮你搞定这个问题!首先来说你遇到的ParseException,十有八九是日期格式器的模式和用户输入的时间格式不匹配导致的。比如用户输入的是8:30这种小时:分钟的格式,你得确保你的格式器用对了模式字符串,不然解析肯定会报错。
一、先搞定ParseException
如果你用的是传统的SimpleDateFormat,针对8:30这种24小时制的输入,格式器得这么定义:
SimpleDateFormat df = new SimpleDateFormat("HH:mm"); // 要是你用12小时制带AM/PM的话就用"hh:mm a",但看你的需求应该是24小时制
另外,最好提前校验用户输入的内容是不是符合HH:mm的格式(比如别让用户输入8-30或者其他乱七八糟的字符),或者用try-catch把解析逻辑包起来,不对就提示用户输入正确格式。
不过更推荐你用Java 8及以上的java.time包下的类(比如LocalTime、DateTimeFormatter),这些类不仅线程安全,API也更直观,踩坑概率低很多:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm"); LocalTime startTime = LocalTime.parse(arrivalTime1, formatter);
要是输入格式不对,会抛出DateTimeParseException,你捕获这个异常给用户提示就行。
二、实现连续时间序列生成
接下来是生成你要的那种连续时间序列,核心逻辑很简单:每次给当前时间加上指定的分钟数,循环生成你需要的次数就行(也可以让用户指定生成多少个,或者生成到某个结束时间)。
用LocalTime来实现超简单,给你一份Android环境下的完整示例代码:
完整示例代码(Android)
// 先获取用户输入的时间和要添加的分钟数 String timeInput = editTextTime.getText().toString().trim(); String minuteInput = editTextMinute.getText().toString().trim(); // 先做输入校验,避免空输入或者非法内容 if (TextUtils.isEmpty(timeInput) || TextUtils.isEmpty(minuteInput)) { Toast.makeText(this, "请填完时间和分钟数哦", Toast.LENGTH_SHORT).show(); return; } int addMinutes; try { addMinutes = Integer.parseInt(minuteInput); if (addMinutes <= 0) { Toast.makeText(this, "分钟数得大于0呀", Toast.LENGTH_SHORT).show(); return; } } catch (NumberFormatException e) { Toast.makeText(this, "分钟数请输入数字哦", Toast.LENGTH_SHORT).show(); return; } // 解析起始时间 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm"); LocalTime startTime; try { startTime = LocalTime.parse(timeInput, formatter); } catch (DateTimeParseException e) { Toast.makeText(this, "时间格式不对哦,比如要输8:30这样的", Toast.LENGTH_SHORT).show(); return; } // 生成时间序列,这里我默认生成10个,你可以改成让用户输入数量或者到某个结束时间 List<String> timeSequence = new ArrayList<>(); LocalTime currentTime = startTime; for (int i = 0; i < 10; i++) { timeSequence.add(currentTime.format(formatter)); currentTime = currentTime.plusMinutes(addMinutes); } // 把结果展示出来,比如用TextView String result = String.join(", ", timeSequence); textViewResult.setText(result);
三、一些关键注意点
- 如果你的项目还在用Java 7及以下,那只能用
Calendar类来做时间加法了,给你个示例片段:
SimpleDateFormat df = new SimpleDateFormat("HH:mm"); Date startTime = df.parse(timeInput); Calendar calendar = Calendar.getInstance(); calendar.setTime(startTime); List<String> timeSequence = new ArrayList<>(); for (int i = 0; i < 10; i++) { timeSequence.add(df.format(calendar.getTime())); calendar.add(Calendar.MINUTE, addMinutes); }
但还是建议尽量升级到Java 8+的时间API,靠谱多了。
- 一定要处理各种异常情况:空输入、分钟数不是数字、时间格式错误,这样用户体验才好。
- 要是你想生成到某个结束时间(比如到12:00),可以把循环条件改成
currentTime.isBefore(endTime),不用固定次数。
内容的提问来源于stack exchange,提问作者NoobCoder
相关产品推荐
相关产品推荐

