如何解析字符串中的时分时间?如何将24小时制转为带AM/PM的12小时制?
时间解析与格式化解决方案
嘿,针对你的两个时间处理问题,我整理了直接实用的方案,尤其是你提到的从MaterialDateTimePicker获取整数参数转12小时制的需求,完全可以不用依赖Date/Calendar对象:
1. 从字符串中解析时、分信息
如果你的时间字符串是HH:mm格式(比如"01:20"、"21:20"),推荐用Java 8+的DateTimeFormatter(线程安全,比旧的SimpleDateFormat更可靠),示例代码如下:
// Java 8+ 实现 String timeString = "21:20"; LocalTime localTime = LocalTime.parse(timeString, DateTimeFormatter.ofPattern("HH:mm")); int hour = localTime.getHour(); // 输出21 int minute = localTime.getMinute(); // 输出20
如果需要兼容Java 8之前的版本,可以用SimpleDateFormat:
String timeString = "01:20"; SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); Date date = sdf.parse(timeString); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int hour = calendar.get(Calendar.HOUR_OF_DAY); // 输出1 int minute = calendar.get(Calendar.MINUTE); // 输出20
2. 将hourOfDay、minute转换为12小时制带AM/PM的格式
既然你是从TimePickerDialog拿到hourOfDay(24小时制整数)和minute参数,直接通过整数逻辑和字符串格式化就能搞定,完全不需要日期类,步骤如下:
- 判断AM/PM:
hourOfDay < 12为AM,否则为PM - 转换12小时制小时:0点转12,12点保持12,其余用
hourOfDay % 12 - 分钟补零:确保分钟始终是两位数字(比如5分钟显示为"05")
Java 示例代码
// 从TimePickerDialog获取的参数 int hourOfDay = 21; int minute = 20; // 确定AM/PM标识 String amPm = hourOfDay < 12 ? "AM" : "PM"; // 转换为12小时制小时 int twelveHour = hourOfDay == 0 ? 12 : (hourOfDay > 12 ? hourOfDay - 12 : hourOfDay); // 格式化分钟为两位数字 String formattedMinute = String.format("%02d", minute); // 拼接最终结果 String friendlyTime = String.format("%d:%s%s", twelveHour, formattedMinute, amPm); // 输出:9:20PM // 如果需要小时也补零(比如09:20PM),把%d改成%02d: // String friendlyTime = String.format("%02d:%s%s", twelveHour, formattedMinute, amPm);
Kotlin 示例代码(如果你用的是Kotlin开发)
// 从TimePickerDialog获取的参数 val hourOfDay = 0 // 对应12点 val minute = 15 val amPm = if (hourOfDay < 12) "AM" else "PM" val twelveHour = when(hourOfDay) { 0 -> 12 12 -> 12 else -> hourOfDay % 12 } val formattedMinute = minute.toString().padStart(2, '0') val friendlyTime = "$twelveHour:$formattedMinute$amPm" // 输出:12:15AM
这个方案完全基于基础的整数运算和字符串处理,轻量且适配你的场景,不需要引入额外的日期类依赖。
内容的提问来源于stack exchange,提问作者kip2
相关产品推荐
相关产品推荐

