Grails 持续时间格式化标签库

Grails time duration formatting tag library

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

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

注:

formatDate 不起作用,因为秒数可能比 86400 多。 因此,在 86461 的持续时间内,formatDate 将 return 变成 00:01:01,而实际上它应该是 24:01:01.

您可以创建一个标签库:将 SecondsTagLib.groovy 放入 grails-app/taglib/(位置和 class 名称中的后缀 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")
  }
}

并在您的视图中使用该标签库:

<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)
  }
}