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

Java 如何将形如1h58m的时长变量添加到当前时间计算结束时间

解决方案

你可以按照「解析时长字符串→计算结束时间→格式化输出」三个步骤实现,以下是两种常用的实现方案:

方案1:兼容Java 8之前的版本(使用Date+Calendar实现)

先解析runtime字符串提取小时、分钟数值,再通过Calendar类完成时间相加操作,完整代码如下:

public void playMovie(Movie movie){
    String runtime = movie.getRuntime(); // 从movie对象取时长,格式为XhYm
    String name = movie.getName(); // 获取电影名称
    
    // 1. 解析时长字符串,提取小时和分钟数
    int hours = 0;
    int minutes = 0;
    // 提取小时数
    if(runtime.contains("h")){
        String hStr = runtime.split("h")[0];
        hours = Integer.parseInt(hStr);
        runtime = runtime.split("h")[1];
    }
    // 提取分钟数
    if(runtime.contains("m")){
        String mStr = runtime.split("m")[0];
        minutes = Integer.parseInt(mStr);
    }

    // 2. 计算电影结束时间
    SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy hh:mmaa");
    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.HOUR_OF_DAY, hours);
    calendar.add(Calendar.MINUTE, minutes);
    Date endDate = calendar.getTime();

    // 3. 按要求输出结果
    System.out.println("The runtime of " + name + " is " + movie.getRuntime() + ".");
    System.out.println(name + " will end at " + df.format(endDate));
}

注意:SimpleDateFormat是线程不安全的,多线程场景下需要单独实例化使用,不要定义为公共静态变量

方案2:Java 8及以上版本(推荐,使用新版时间API实现)

Java 8新增的java.time包下的类解决了旧版Date、Calendar的线程安全、设计不合理问题,实现更简便:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public void playMovie(Movie movie){
    String runtime = movie.getRuntime();
    String name = movie.getName();

    // 1. 用正则表达式精准匹配解析时长
    Pattern pattern = Pattern.compile("(\\d+)h(\\d+)m");
    Matcher matcher = pattern.matcher(runtime);
    int hours = 0;
    int minutes = 0;
    if(matcher.find()){
        hours = Integer.parseInt(matcher.group(1));
        minutes = Integer.parseInt(matcher.group(2));
    }

    // 2. 计算结束时间
    LocalDateTime endTime = LocalDateTime.now()
            .plus(hours, ChronoUnit.HOURS)
            .plus(minutes, ChronoUnit.MINUTES);
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy hh:mma");
    
    // 3. 输出结果
    System.out.println("The runtime of " + name + " is " + runtime + ".");
    System.out.println(name + " will end at " + endTime.format(formatter));
}

内容的提问来源于stack exchange,提问作者koncameron

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:24:00