Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过EL以人类可读的格式打印持续时间_Java_Jsp_Java 8 - Fatal编程技术网

Java 通过EL以人类可读的格式打印持续时间

Java 通过EL以人类可读的格式打印持续时间,java,jsp,java-8,Java,Jsp,Java 8,首先,我不熟悉java.timepackage 我正在编写一个网络应用程序,它需要在一天中的特定时间和事件的几个持续时间内工作 因此,我使用LocalTime和Duration类java.time包编写代码 当我需要在JSP中呈现它们的值时,LocalTime对象非常简单(因为.toString()返回一个人类可读的值),所以我可以只写${startTime},一切都以正确的方式进行(例如,它被呈现为9:00)。 同样的方法不适用于持续时间,因为它的表示形式类似于PT20M(在本例中为20分钟)

首先,我不熟悉
java.time
package

我正在编写一个网络应用程序,它需要在一天中的特定时间和事件的几个持续时间内工作

因此,我使用
LocalTime
Duration
java.time
包编写代码

当我需要在JSP中呈现它们的值时,
LocalTime
对象非常简单(因为
.toString()
返回一个人类可读的值),所以我可以只写
${startTime}
,一切都以正确的方式进行(例如,它被呈现为
9:00
)。 同样的方法不适用于持续时间,因为它的表示形式类似于
PT20M
(在本例中为20分钟)

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

是的,我知道我可以在我的类中转换字符串形式的对象(在JSP之前),但我正在搜索建议的方法(我找不到)。。。另一点是,我在Duration对象中没有看到正式的“convert()”(或任何其他)方法。。。因此,我认为我使用了错误的对象来映射持续时间(在
LocalTime
s上加或减)


谢谢。

不幸的是,Java 8中没有优雅的内置方式来格式化
持续时间。我发现最好的方法是使用bobince在回答中描述的方法:

其中打印:

1:20:00

如果需要更长的持续时间,则必须对代码进行调优


我不确定您缺少
convert
方法是什么意思,但是
Duration
非常适合在
LocalTime
上进行加减操作。方法
LocalTime.plus()
LocalTime.minus()
接受
Duration
作为参数。

如果您对单词感兴趣,apache commons将执行以下操作:

 DurationFormatUtils.formatDurationWords(System.currentTimeMillis() - start, true, false))

您是否只需要英语或其他任何语言的格式化文本持续时间(如德语中的“1分钟和20分钟”)?如果其他语言很重要,那么我建议使用额外的第三方库。Java-8不包含任何内置的持续时间格式,另请参阅@Erlandson的正确答案,如果您只需要数字形式,这就足够了。事实上,我只需要20分钟的20,或1小时20分钟的1:20。。。与本地化无关,只是一种人类可读的形式…谢谢。。。我使用duration只表示事件的持续时间(因此,如果LocalTime为9:00,则持续时间为30分钟,我可以使用您编写的内容获得另一个LocalTime作为总和:9:30)。说到“convert()”方法,我只是指没有一个方法来转换字符串表示形式中的Duration对象(这也是问题的主题……这只是一个重复)。顺便说一句很奇怪,没有标记库或其他东西来完成持续时间所需的工作,但是LocalTime只需通过它的toString()来执行这项工作。最后,我决定在我的bean中创建另一个get方法,该方法将由我的EL代码按需使用:我编写了
${item.myDurationStr}
而不是
${item.myDuration}
,它将“转换”格式,代码类似于
public String getMyDurationStr(){
long sec=myDuration.getSeconds();
返回String.format(“%02d:%02d”,sec/3600,(sec%3600)/60);//我不需要秒
很好,正是我想要的。谢谢!
 DurationFormatUtils.formatDurationWords(System.currentTimeMillis() - start, true, false))
 2 days 1 hour 5 minutes 20 seconds