JTable包括时间字段,例如“01:50”。我需要将此值读入整数变量。为此,我想将时间转换为分钟。例如,“01:50”应转换为110。
要解决此任务,首先我将时间值保存为String。
String minutS = tableModel.getValueAt(1,1).toString();
其次,我将处理此String并提取符号:
之前和之后的整数。最后,我将计算总分钟数。
这个解决方案有效吗?也许,有可能用日历替换它或者像这样吗?
答案 0 :(得分:15)
对于这种情况,我不认为使用Calendar / Date会比直接解析更好。如果你的时间格式确实是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;
}
答案 1 :(得分:2)
这个怎么样:
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 */
答案 2 :(得分:1)
查看我们在我们的应用程序中使用的示例
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;
}
答案 3 :(得分:0)
在处理之前剥去输入。 (commons-lang utils
)
空格可以使NumberFormatExceptions
出现。
答案 4 :(得分:0)
从java 1.8开始,最优雅的解决方案可能是:
long minutes = ChronoUnit.MINUTES.between(LocalTime.MIDNIGHT, LocalTime.parse("01:50"));