我将不同的时间(例如05:25)作为Arrayist中的String并显示在表格中。我需要增加总时间。但是在我尝试添加String时,代码下面会抛出异常。
<c:set var="total" value="${0}"/>
<c:forEach var="listItems" items="${requestScope.accTimeSheetList}">
<tr>
<td><c:out value='${listItems.myTime}'/></td> (e.g. 05:25)
</tr>
<c:set var="total" value="${total + listItems.myTime}"/>
</c:forEach>
<td>
${total}
</td>
请帮助我解决这个问题。
答案 0 :(得分:1)
我建议在Java中编写一个执行此操作的后端方法,因为它可以用几行JSTL代码来完成。
Joda库对此类内容非常有用。 (在Java 8中,可能更喜欢新的java.time。*类。)
public class TimeUtils {
private static final PeriodFormatter HH_MM_FORMATTER = new PeriodFormatterBuilder()
.printZeroAlways()
.minimumPrintedDigits(2)
.appendHours()
.appendSeparator(":")
.printZeroAlways()
.minimumPrintedDigits(2)
.appendMinutes()
.toFormatter();
private static final PeriodFormatter DD_HH_MM_FORMATTER = new PeriodFormatterBuilder()
.printZeroAlways()
.minimumPrintedDigits(2)
.appendDays()
.appendSeparator(":")
.printZeroAlways()
.minimumPrintedDigits(2)
.appendHours()
.appendSeparator(":")
.printZeroAlways()
.minimumPrintedDigits(2)
.appendMinutes()
.toFormatter();
public static String addHhMmPeriods(List<String> hhMmPeriods) {
Period total = new Period();
for (String hhMmPeriod : hhMmPeriods) {
total = total.plus(HH_MM_FORMATTER.parsePeriod(hhMmPeriod));
}
return total.normalizedStandard().toString(DD_HH_MM_FORMATTER);
}
}
Java用法示例:
public static void main(String[] args) throws ParseException {
List<String> hhMmPeriods = new ArrayList<String>();
hhMmPeriods.add("01:11");
hhMmPeriods.add("11:00");
hhMmPeriods.add("00:55");
hhMmPeriods.add("21:47");
System.out.println(TimeUtils.addHhMmPeriods(hhMmPeriods)); // => 01:10:53
}
然后,您可以将此方法包装在JSP标记库中,或者只使用JSP scriptlet直接调用Java方法。
答案 1 :(得分:0)
您可以通过这种方式使用scriptlet,并确保在页面中导入所有必需的包
<%
String myTime = "05:25";
SimpleDateFormat df = new SimpleDateFormat("HH:mm");
Date d = df.parse(myTime);
Calendar cal = Calendar.getInstance();
cal.setTime(d);
cal.add(Calendar.MINUTE, 20); //adding 20 mins
String newTime = df.format(cal.getTime());
%>
您只需根据示例
为您的案例编写正确的逻辑