EL

时间:2015-06-27 17:39:31

标签: java jsp java-8

首先,我是java.time包的新手。

我正在编写一个需要在一天中的特定时间和多个事件持续时间内工作的Web应用程序。

所以我使用LocalTimeDurationjava.time包编写了我的代码。

当我需要在JSP中呈现它们的值时,LocalTime对象非常简单(因为.toString()返回一个人类可读的值),所以我可以写${startTime},一切都顺利以正确的方式(例如,它呈现为9:00)。 相同的方法对于持续时间不起作用,因为它的表示类似于PT20M(在这种情况下为20分钟)。

是否存在一种优雅的方式来直接通过EL在JSP中执行人类可读的转换?

是的,我知道我可以在我的类中(在JSP之前)转换字符串中的对象,但是我正在搜索建议的方法(我无法找到)...另一个重点是,我没有看到官方" convert()"持续时间对象中的(或其他任何)方法...所以我想我使用错误的对象来映射持续时间(在LocalTime上添加或减去)。

谢谢。

2 个答案:

答案 0 :(得分:7)

不幸的是,在Java 8中没有优雅的内置方式来格式化Duration。我发现最好的方法是使用this中的 bobince 描述的方法回答:< / p>

    Duration duration = Duration.ofHours(1).plusMinutes(20);
    long s = duration.getSeconds();
    System.out.println(String.format("%d:%02d:%02d", s/3600, (s%3600)/60, (s%60)));

打印哪些:

  

1时20分○○秒

如果您需要更长的持续时间,则必须调整代码。

我不确定您错过convert方法的含义,但Duration非常适合在LocalTime上添加/减去。方法LocalTime.plus()LocalTime.minus()接受Duration作为参数。

答案 1 :(得分:0)

如果您对单词感兴趣,可以使用apache commons来解决:

 DurationFormatUtils.formatDurationWords(System.currentTimeMillis() - start, true, false))
 2 days 1 hour 5 minutes 20 seconds'"

https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DurationFormatUtils.html#formatDurationWords-long-boolean-boolean-