首先,我是新手java.time
包装.
我正在编写一个webapp,需要在一天中的特定时间和几个事件持续时间内工作.
所以我用包LocalTime
和Duration
类编写了我的代码java.time
.
当我需要在JSP中呈现它们的值时,它对于LocalTime
对象来说非常简单(因为.toString()
返回一个人类可读的变量),所以我可以只是编写${startTime}
并且所有内容都以正确的方式进行(例如,它呈现为9:00
).相同的方法对于持续时间不起作用,因为它的表示类似于PT20M
(在这种情况下为20分钟).
是否存在一种优雅的方式来直接通过EL在JSP中执行人类可读的转换?
是的,我知道我可以在我的类中(在JSP之前)转换字符串中的对象,但我正在寻找建议的方法(我无法找到)...另一点是我看不到在Duration对象中官方的"convert()"(或其他任何)方法...所以我在想我正在使用错误的对象来映射持续时间(在LocalTime
s 上加或减).
谢谢.
不幸的是,Duration
在Java 8中没有优雅的内置方式来格式化.我发现最好的方法是使用bobince描述的方法在这个答案中:
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)));
Run Code Online (Sandbox Code Playgroud)
哪个印刷品:
一点20分00秒
如果您需要更长的持续时间,则必须调整代码.
我不确定你是什么意思,你错过了一个convert
方法,但Duration
非常适合添加/减去LocalTime
.方法LocalTime.plus()
并LocalTime.minus()
接受Duration
作为参数.
如果你对单词感兴趣,apache commons 就能满足你的需求:
DurationFormatUtils.formatDurationWords(System.currentTimeMillis() - start, true, false))
Run Code Online (Sandbox Code Playgroud)
2 days 1 hour 5 minutes 20 seconds
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3779 次 |
最近记录: |