2015-06-27 87 views
5

首先,我是java.time包的新手。通过EL打印持续时间为人类可读格式

我正在写一个web应用程序,需要使用一天的特定时间和几个持续时间的事件。

因此,我使用LocalTimeDuration类的java.time包编写了我的代码。

当我需要使它们在JSP价值它是LocalTime对象非常简单(因为.toString()返回一个人类可读的淡水河谷),这样我就可以写${startTime},万事如意以正确的方式(例如,它呈现为9:00 )。 相同的方法不适用于持续时间,因为它的表示形式类似于PT20M(在这种情况下为20分钟)。

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

是的,我知道我可以在我的类(JSP之前)字符串中转换对象,但我正在寻找建议的方法(我无法找到)......另一点是我在Duration对象中看不到官方的“convert()”(或任何其他)方法......所以我想我使用错误的对象来映射一段时间(在LocalTime s上添加或减去)。

谢谢。

+1

您是否需要格式化文本才能使用英文或其他语言(例如德语中的“1 Stunde und 20 Minuten”)?如果其他语言很重要,那么我建议使用额外的第三方库。 Java-8不包含任何内置的持续时间格式,另请参阅@Erlandsson的正确答案,如果您只需要一个数字表单就足够了。 –

+0

事实上,我只需要一个20分钟20分钟,或1:20 1小时20分钟......与本地化无关,只是一种人类可读的形式...... –

回答

5

不幸的是不存在优雅内建的方法在Java中8格式化Duration我发现最好是使用方法bobince介绍this答案:

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:00

该代码将必须调整,如果你需要更长的时间。

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

+0

谢谢......我正在使用仅用于表示事件的持续时间(因此,如果LocalTime是9:00,那么持续时间为30分钟,那么我可以使用您写的来获得另一个LocalTime作为总和:9:30)。说到类似“convert()”方法的东西,我只是指没有将字符串表示中的Duration对象转换的方法(这又是问题的主题......它只是一个重复) 。顺便一提...如果没有taglib或别的什么东西来做我需要的持续时间是非常奇怪的,但是LocalTime只需要通过它的toString() –

+0

就可以完成它。最后,我决定在我的bean中创建另一个get方法,这将是我的EL代码需要使用:我编写了'$ {item.myDurationStr}'而不是'$ {item.myDuration}',它将“转换”格式,使用类似 'public String getMyDurationStr() {' 'long sec = myDuration.getSeconds();' 'return String.format(“%02d:%02d”,sec/3600,(sec%3600)/ 60); //我不需要几秒钟' '}' –

相关问题