首先,我是新手java.time包装.
我正在编写一个webapp,需要在一天中的特定时间和几个事件持续时间内工作.
所以我用包LocalTime和Duration类编写了我的代码java.time.
当我需要在JSP中呈现它们的值时,它对于LocalTime对象来说非常简单(因为.toString()返回一个人类可读的变量),所以我可以只是编写${startTime}并且所有内容都以正确的方式进行(例如,它呈现为9:00).相同的方法对于持续时间不起作用,因为它的表示类似于PT20M(在这种情况下为20分钟).
是否存在一种优雅的方式来直接通过EL在JSP中执行人类可读的转换?
是的,我知道我可以在我的类中(在JSP之前)转换字符串中的对象,但我正在寻找建议的方法(我无法找到)...另一点是我看不到在Duration对象中官方的"convert()"(或其他任何)方法...所以我在想我正在使用错误的对象来映射持续时间(在LocalTimes 上加或减).
谢谢.
不幸的是,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)