在JSTL中添加不同的时间

时间:2014-01-30 11:13:05

标签: java jsp jstl

我将不同的时间(例如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>

请帮助我解决这个问题。

2 个答案:

答案 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());
%>

您只需根据示例

为您的案例编写正确的逻辑