Grails持续时间格式化标记库

时间:2015-03-18 19:42:21

标签: grails formatting gsp taglib

Grails有3个干净的格式化标记库:

  • formatDate
  • formatNumber
  • formatBoolean

想知道是否有一个格式化HH:MM:SS?或者如果有另一种优雅的方式来格式化渲染视图中的秒数。

注意:

formatDate不起作用,因为可能会有超过86400的秒数。 因此,对于86461 formatDate的持续时间,将返回00:01:01,其中实际上应为24:01:01

1 个答案:

答案 0 :(得分:0)

您可以创建一个标记库:将SecondsTagLib.groovy放入grails-app/taglib/(位置和类名中的后缀TagLib都很重要。)

class SecondsTagLib {
  def formatSeconds = { 
    attrs, body ->
      final int hours = attrs.seconds / (60 * 60)
      final int remainder = attrs.seconds % (60 * 60)
      final int minutes = remainder / 60
      final int seconds = remainder % 60

      out << hours.toString().padLeft(2, "0") + ":" + minutes.toString().padLeft(2, "0") + ":" + seconds.toString().padLeft(2, "0")
  }
}

并在您的视图中使用该taglib:

<html>
  <body>
    Seconds: ${seconds} = <g:formatSeconds seconds="${seconds}"/>
  </body>
</html>

控制器的方法可能如下所示:

class TagLibController {
  def seconds() { 
    // 10:11:01
    def seconds = (10 * 60 * 60) + (11 * 60) + 1
    def model = ["seconds": seconds]
    render(view: "seconds", model: model)
  }
}