Java中如何将字符串转换为日期对象并提取时分
解决Java字符串转日期并提取小时分钟的问题
嘿,我来帮你搞定这个问题!你的代码里有两个关键问题需要修正,另外我也会推荐更现代的Java日期处理方式,毕竟旧的API确实有点坑。
一、先修正你用的旧版java.util.Date方案
你的代码里犯了两个核心错误:
- 调用方法搞反了:
SimpleDateFormat.format()是把Date对象转成字符串,而要把字符串转成Date,得用parse()方法。 - 格式化模式不匹配:你定义的
"HH:mm"和输入字符串"Mar 19 2018 - 14:39"的格式完全不符,必须先定义一个和输入格式一致的格式化器来解析字符串。
另外要注意:因为月份是英文缩写(Mar),最好指定Locale.US,避免系统默认Locale不是英文时解析失败。
修正后的完整代码:
import java.util.Date; import java.text.SimpleDateFormat; import java.text.ParseException; import java.util.Locale; public class DateEg { public static void main(String[] args) { // 定义匹配输入字符串的格式化器,指定Locale确保英文月份能正确解析 SimpleDateFormat inputFormat = new SimpleDateFormat("MMM dd yyyy - HH:mm", Locale.US); // 用来提取小时分钟的格式化器 SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm"); String oldstring = "Mar 19 2018 - 14:39"; try { // 将字符串解析为Date对象 Date date = inputFormat.parse(oldstring); // 提取小时分钟的字符串形式 String time = timeFormat.format(date); System.out.println("提取的时间:" + time); // 如果需要单独获取小时、分钟数值,用Calendar java.util.Calendar cal = java.util.Calendar.getInstance(); cal.setTime(date); int hour = cal.get(java.util.Calendar.HOUR_OF_DAY); // 24小时制 int minute = cal.get(java.util.Calendar.MINUTE); System.out.println("小时:" + hour + ",分钟:" + minute); } catch (ParseException e) { e.printStackTrace(); } } }
二、推荐使用Java 8+的java.time新API
旧的Date/SimpleDateFormat存在线程不安全、API设计不直观等问题,Java 8及以后推荐使用java.time包下的类,它们是不可变的,线程安全,使用起来更清晰。
示例代码:
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Locale; public class DateEg { public static void main(String[] args) { // 定义匹配输入的格式化器,指定Locale.US解析英文月份 DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("MMM dd yyyy - HH:mm", Locale.US); String oldstring = "Mar 19 2018 - 14:39"; // 解析为LocalDateTime对象 LocalDateTime dateTime = LocalDateTime.parse(oldstring, inputFormatter); // 提取小时分钟的字符串形式 String time = dateTime.format(DateTimeFormatter.ofPattern("HH:mm")); System.out.println("提取的时间:" + time); // 直接获取小时、分钟数值,API更直观 int hour = dateTime.getHour(); int minute = dateTime.getMinute(); System.out.println("小时:" + hour + ",分钟:" + minute); } }
这个方案不需要处理ParseException(解析失败会抛出DateTimeParseException,属于RuntimeException),代码逻辑也更简洁易懂。
内容的提问来源于stack exchange,提问作者Arun
相关产品推荐
相关产品推荐

