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

Java中如何将字符串转换为日期对象并提取时分

解决Java字符串转日期并提取小时分钟的问题

嘿,我来帮你搞定这个问题!你的代码里有两个关键问题需要修正,另外我也会推荐更现代的Java日期处理方式,毕竟旧的API确实有点坑。

一、先修正你用的旧版java.util.Date方案

你的代码里犯了两个核心错误:

  1. 调用方法搞反了:SimpleDateFormat.format()是把Date对象转成字符串,而要把字符串转成Date,得用parse()方法。
  2. 格式化模式不匹配:你定义的"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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:33:30