Java中验证hh:mm格式时间有效性的解决方案咨询
验证hh:mm格式时间有效性的解决方案
下面是几种能直接用到你代码里的实用方法,解决带冒号的时间字符串无法直接转整数校验的问题:
方法1:拆分字符串后校验数值
把输入的时间字符串按冒号分割,分别提取小时和分钟转成整数,再检查数值范围是否合法:
import java.util.Scanner; public class TimeValidator { public static void main(String[] args) { Scanner timeInput = new Scanner(System.in); System.out.println("请输入日出时间 [hh:mm]> "); String sunrise = timeInput.next(); System.out.println("请输入日落时间 [hh:mm]> "); String sunset = timeInput.next(); // 校验日出时间 if (isValidTime(sunrise)) { System.out.println("日出时间格式合法"); } else { System.out.println("日出时间格式错误,请输入hh:mm格式"); } // 校验日落时间 if (isValidTime(sunset)) { System.out.println("日落时间格式合法"); } else { System.out.println("日落时间格式错误,请输入hh:mm格式"); } timeInput.close(); } // 封装时间校验方法 private static boolean isValidTime(String timeStr) { // 按冒号分割字符串 String[] timeParts = timeStr.split(":"); // 先判断是否拆分成了小时、分钟两部分 if (timeParts.length != 2) { return false; } try { int hour = Integer.parseInt(timeParts[0]); int minute = Integer.parseInt(timeParts[1]); // 校验小时范围0-23,分钟范围0-59 return hour >= 0 && hour <= 23 && minute >= 0 && minute <= 59; } catch (NumberFormatException e) { // 转整数失败说明输入不是数字,直接判定非法 return false; } } }
方法2:正则匹配+数值校验
先用正则表达式过滤格式错误的输入,再拆分数值做双重校验,能提前拦截不符合hh:mm格式的字符串:
// 修改校验方法即可,其他代码和方法1一致 private static boolean isValidTime(String timeStr) { // 正则规则:小时支持0-9、00-09、10-19、20-23;分钟固定00-59 String timeRegex = "^([01]?[0-9]|2[0-3]):([0-5][0-9])$"; if (!timeStr.matches(timeRegex)) { return false; } // 拆分后做数值校验(可选,正则已保证范围,做双重保险更严谨) String[] timeParts = timeStr.split(":"); int hour = Integer.parseInt(timeParts[0]); int minute = Integer.parseInt(timeParts[1]); return hour >= 0 && hour <= 23 && minute >= 0 && minute <= 59; }
方法3:用Java时间API直接解析(推荐)
Java 8及以上版本的LocalTime类自带时间解析功能,能直接识别hh:mm格式,解析成功即代表时间合法,代码最简洁:
import java.time.LocalTime; import java.time.format.DateTimeParseException; import java.util.Scanner; public class TimeValidator { public static void main(String[] args) { Scanner timeInput = new Scanner(System.in); System.out.println("请输入日出时间 [hh:mm]> "); String sunrise = timeInput.next(); System.out.println("请输入日落时间 [hh:mm]> "); String sunset = timeInput.next(); if (isValidTime(sunrise)) { System.out.println("日出时间格式合法"); } else { System.out.println("日出时间格式错误,请输入hh:mm格式"); } if (isValidTime(sunset)) { System.out.println("日落时间格式合法"); } else { System.out.println("日落时间格式错误,请输入hh:mm格式"); } timeInput.close(); } private static boolean isValidTime(String timeStr) { try { // 按标准hh:mm格式解析,失败则抛异常 LocalTime.parse(timeStr); return true; } catch (DateTimeParseException e) { return false; } } }
内容的提问来源于stack exchange,提问作者asd
相关产品推荐
相关产品推荐

