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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:15:03