Java 向“添加更多分钟”的代码;HH:MM";一串

Java 向“添加更多分钟”的代码;HH:MM";一串,java,time,Java,Time,我几乎完成了代码,但仍然需要一些帮助。此代码根据将minutes添加到startTime计算newTime。minutes的值可能大于60。问题是,在当前示例中,它必须输出“00:10”,但它输出“23:70” String startTime=“23:40”; 整数分钟=30; 字符串[]hm=startTime.split(“:”); inth=分钟/60+整数.parseInt(hm[0]); int m=minutes%60+整数.parseInt(hm[1]); 如果(m我建议将自午夜

我几乎完成了代码,但仍然需要一些帮助。此代码根据将
minutes
添加到
startTime
计算
newTime
minutes
的值可能大于60。问题是,在当前示例中,它必须输出“00:10”,但它输出“23:70”

String startTime=“23:40”;
整数分钟=30;
字符串[]hm=startTime.split(“:”);
inth=分钟/60+整数.parseInt(hm[0]);
int m=minutes%60+整数.parseInt(hm[1]);

如果(m我建议将自午夜以来的总分钟数作为单个值计算,然后添加所需数量,然后重新计算得出的小时和分钟数:

String startTime = "23:40";
int minutes = 30;

String[] hm = startTime.split(":");
int h = Integer.parseInt(hm[0]);
int m = Integer.parseInt(hm[1]);

int t = h * 60 + m;      // total minutes
t += minutes;            // add the desired offset

while (t < 0) {          // fix `t` so that it's never negative
  t += 1440;             // 1440 minutes in a day
}

int nh = (t / 60) % 24;  // calculate new hours
int nm = t % 60;         // calculate new minutes

String newTime = String.format("%02d:%02d", nh, nm); 
String startTime=“23:40”;
整数分钟=30;
字符串[]hm=startTime.split(“:”);
inth=Integer.parseInt(hm[0]);
int m=Integer.parseInt(hm[1]);
int t=h*60+m;//总分钟数
t+=分钟;//添加所需的偏移量
而(t<0){//fix`t`使其永远不为负
t+=1440;//每天1440分钟
}
int nh=(t/60)%24;//计算新的小时数
int nm=t%60;//计算新的分钟数
String newTime=String.format(“%02d:%02d”,nh,nm);

绝对不应该将
minutes
变量添加到
h
的计算中-它们是不兼容的单位。

我建议将自午夜以来的总分钟数作为单个值进行计算,然后添加所需的量,然后重新计算得到的小时数和分钟数:

String startTime = "23:40";
int minutes = 30;

String[] hm = startTime.split(":");
int h = Integer.parseInt(hm[0]);
int m = Integer.parseInt(hm[1]);

int t = h * 60 + m;      // total minutes
t += minutes;            // add the desired offset

while (t < 0) {          // fix `t` so that it's never negative
  t += 1440;             // 1440 minutes in a day
}

int nh = (t / 60) % 24;  // calculate new hours
int nm = t % 60;         // calculate new minutes

String newTime = String.format("%02d:%02d", nh, nm); 
String startTime=“23:40”;
整数分钟=30;
字符串[]hm=startTime.split(“:”);
inth=Integer.parseInt(hm[0]);
int m=Integer.parseInt(hm[1]);
int t=h*60+m;//总分钟数
t+=分钟;//添加所需的偏移量
而(t<0){//fix`t`使其永远不为负
t+=1440;//每天1440分钟
}
int nh=(t/60)%24;//计算新的小时数
int nm=t%60;//计算新的分钟数
String newTime=String.format(“%02d:%02d”,nh,nm);
您绝对不应该将
minutes
变量添加到
h
的计算中-它们是不兼容的单位。

如何:

import java.util.*;
import java.util.regex.*;

...

String startTime = "23:40";
int additionalMinutes = 30;

Pattern pat = Pattern.compile( "(\\d+):(\\d+)" );
Matcher x = pat.matcher(startTime);
if (x.matches())
{
    int h = Integer.parseInt(x.group(1));
    int m = Integer.parseInt(x.group(2));

    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.HOUR, h);
    cal.set(Calendar.MINUTE, m);
    cal.add(Calendar.MINUTE, additionalMinutes);

    h = cal.get(Calendar.HOUR);
    m = cal.get(Calendar.MINUTE);

    System.out.println(
            "Start: " + startTime + 
            " + " + additionalMinutes + " minutes = " +
            h + ":" + m );
}
else
{
    /* bad format */
}
输出:开始:23:40+30分钟=0:10

import java.util.*;
import java.util.regex.*;

...

String startTime = "23:40";
int additionalMinutes = 30;

Pattern pat = Pattern.compile( "(\\d+):(\\d+)" );
Matcher x = pat.matcher(startTime);
if (x.matches())
{
    int h = Integer.parseInt(x.group(1));
    int m = Integer.parseInt(x.group(2));

    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.HOUR, h);
    cal.set(Calendar.MINUTE, m);
    cal.add(Calendar.MINUTE, additionalMinutes);

    h = cal.get(Calendar.HOUR);
    m = cal.get(Calendar.MINUTE);

    System.out.println(
            "Start: " + startTime + 
            " + " + additionalMinutes + " minutes = " +
            h + ":" + m );
}
else
{
    /* bad format */
}

输出:开始:23:40+30分钟=0:10

为什么你有代码来处理负分钟?有
00:-1
有意义吗?如果有,你可以有
-1:00
?或者
-1:-1
?他真正的问题是加法,而不是字符串conversion@Peter劳瑞:代码处理负分钟数,因为val分钟的ue可能是,例如-30。在这种情况下,我需要通过根据开始时间移动它来正确计算新时间。@YouKuper加法应该在您将
hh:mm
转换为“午夜后的分钟”后进行,根据我的回答。这样你永远不会得到一个负数。为什么你有代码来处理负数分钟?有
00:-1
有意义吗?如果有,你可以有
-1:00
?或者
-1:-1
?他的真正问题是加法,而不是字符串conversion@Peter劳瑞:代码处理负分钟数,贝克因为分钟的值可能是,例如-30。在这种情况下,我需要通过根据开始时间移动它来正确计算新时间。@YouKuper根据我的回答,加法应该在您将
hh:mm
转换为“午夜后的分钟数”后进行。这样您就永远不会得到负数。