在JAVA中将时间字段H:M转换为整数字段(分钟)

在JAVA中将时间字段H:M转换为整数字段(分钟),java,swing,time,Java,Swing,Time,JTable包括时间字段,例如“01:50”。我需要将这个值读入整数变量。为此,我想把时间转换成分钟。例如,“01:50”应转换为110 为了解决该任务,首先我将时间值保存为字符串 String minutS = tableModel.getValueAt(1,1).toString(); 其次,我将处理这个字符串并提取符号:前后的整数。最后,我将计算总分钟数。 这个解决方案有效吗?也许可以用日历或类似的东西来代替它?看看下面我们在应用程序中使用的示例 public static int to

JTable包括时间字段,例如“01:50”。我需要将这个值读入整数变量。为此,我想把时间转换成分钟。例如,“01:50”应转换为110

为了解决该任务,首先我将时间值保存为字符串

String minutS = tableModel.getValueAt(1,1).toString();
其次,我将处理这个字符串并提取符号
前后的整数。最后,我将计算总分钟数。
这个解决方案有效吗?也许可以用日历或类似的东西来代替它?

看看下面我们在应用程序中使用的示例

public static int toMinutes( String sDur, boolean bAssumeMinutes ) throws NumberFormatException {
        /* Use of regular expressions might be better */
        int iMin = 0;
        int iHr = 0;
        sDur = sDur.trim();
        //find punctuation
        int i = sDur.indexOf(":");//HH:MM
        if (i < 0) {
            //no punctuation, so assume whole thing is an number
            //double dVal = Double.parseDouble(sDur);
            double dVal = ParseAndBuild.parseDouble(sDur, Double.NaN);
            if (Double.isNaN(dVal)) throw new NumberFormatException(sDur);
            if (!bAssumeMinutes) {
                //decimal hours so add half a minute then truncate to minutes
                iMin = (int)((dVal * 60.0) + (dVal < 0 ? -0.5 : 0.5));
            } else {
                iMin = (int)dVal;
            }
        }
        else {
            StringBuffer sBuf = new StringBuffer(sDur);
            int j = sBuf.indexOf(MINUS_SIGN);
            //check for negative sign
            if (j >= 0) {
                //sign must be leading/trailing but either allowed regardless of MINUS_SIGN_TRAILS
                if (j > 0 && j < sBuf.length() -1)
                    throw new NumberFormatException(sDur);                  
                sBuf.deleteCharAt(j);
                i = sBuf.indexOf(String.valueOf(":"));
            }
            if (i > 0)
                iHr = Integer.parseInt(sBuf.substring(0, i)); //no thousands separators allowed
            if (i < sBuf.length() - 1)
                iMin = Integer.parseInt(sBuf.substring(i+1));
            if (iMin < 0 || (iHr != 0 && iMin >= 60))
                throw new NumberFormatException(sDur);
            iMin += iHr * 60;
            if (j >= 0) iMin = -iMin;
        }
        return iMin;
    }
publicstaticinttominutes(stringsdur,booleanbusumeminutes)抛出NumberFormatException{
/*使用正则表达式可能更好*/
int-iMin=0;
int iHr=0;
sDur=sDur.trim();
//查找标点符号
int i=sDur.indexOf(“:”;//HH:MM
if(i<0){
//没有标点符号,所以假设整件事都是一个数字
//double-dVal=double.parseDouble(sDur);
double-dVal=ParseAndBuild.parseDouble(sDur,double.NaN);
if(Double.isNaN(dVal))抛出新的NumberFormatException(sDur);
如果(!分钟){
//十进制小时,所以加半分钟,然后截断为分钟
iMin=(int)((dVal*60.0)+(dVal<0?-0.5:0.5));
}否则{
iMin=(int)dVal;
}
}
否则{
StringBuffer sBuf=新的StringBuffer(sDur);
int j=sBuf.indexOf(减号);
//检查是否有负号
如果(j>=0){
//符号必须是前导/尾随的,但无论是负号还是尾随,都可以
如果(j>0&&j0)
iHr=Integer.parseInt(sBuf.substring(0,i));//不允许使用数千个分隔符
如果(i=60))
抛出新的NumberFormatException(sDur);
iMin+=iHr*60;
如果(j>=0)iMin=-iMin;
}
返回亚胺;
}

对于这种情况,我不认为使用日历/日期比直接解析要好。如果你的时间格式确实是H:m,那么我认为你不需要比这更复杂的东西:

/**
 * @param s H:m timestamp, i.e. [Hour in day (0-23)]:[Minute in hour (0-59)]
 * @return total minutes after 00:00
 */
private static int toMins(String s) {
    String[] hourMin = s.split(":");
    int hour = Integer.parseInt(hourMin[0]);
    int mins = Integer.parseInt(hourMin[1]);
    int hoursInMins = hour * 60;
    return hoursInMins + mins;
}
这个怎么样:

String time = "1:50";
String[] split = time.split(":"); 
if(split.length == 2) { 
        long minutes = TimeUnit.HOURS.toMinutes(Integer.parseInt(split[0])) + 
                         Integer.parseInt(split[1]);
        System.out.println(minutes);
    }

/* Output: 110 */

在处理输入之前去除输入。(
commons lang utils


空格可以使
numberformatceptions
发生。

因为java 1.8最优雅的解决方案可能是:


long minutes=ChronoUnit.minutes.between(LocalTime.MIDNIGHT,LocalTime.parse(“01:50”)

表模型中的数据的实际类型是什么?@sudocode如果给定的字符串是12小时格式(如下午3:30),则上述代码将在第行抛出numberFormat异常:int mins=Integer.parseInt(hourMin[1]);那么,如何用上述代码避免这个问题呢?所以基本上字符串可以是12小时格式或24小时格式,它应该可以工作!!!!!!