You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求XQuery/XSLT 1.0函数:将时长转换为PT*H*M格式

时长转PT*H*M格式的实现方案

XQuery 函数实现

以下是一个XQuery函数,可将整数或带小数的小时数转换为符合要求的时长格式:

declare function local:convert-to-duration($hours as xs:double?) as xs:string? {
  if ($hours) then
    let $total-minutes := $hours * 60,
        $whole-hours := floor($total-minutes div 60),
        $remaining-minutes := floor($total-minutes mod 60)
    return
      concat(
        'PT',
        if ($whole-hours > 0) then concat($whole-hours, 'H') else '',
        if ($remaining-minutes > 0) then concat($remaining-minutes, 'M') else ''
      )
  else
    ()
};

使用示例

  • 输入 local:convert-to-duration(5) → 返回 PT5H
  • 输入 local:convert-to-duration(5.5) → 返回 PT5H30M
  • 输入 local:convert-to-duration(0.25) → 返回 PT15M

XSLT 1.0 模板实现

如果XQuery环境不可用,可使用XSLT1.0的命名模板来实现相同功能:

<xsl:template name="convert-to-duration">
  <xsl:param name="hours" select="0"/>
  <xsl:variable name="total-minutes" select="$hours * 60"/>
  <xsl:variable name="whole-hours" select="floor($total-minutes div 60)"/>
  <xsl:variable name="remaining-minutes" select="floor($total-minutes mod 60)"/>
  
  <xsl:text>PT</xsl:text>
  <xsl:if test="$whole-hours > 0">
    <xsl:value-of select="$whole-hours"/>
    <xsl:text>H</xsl:text>
  </xsl:if>
  <xsl:if test="$remaining-minutes > 0">
    <xsl:value-of select="$remaining-minutes"/>
    <xsl:text>M</xsl:text>
  </xsl:if>
</xsl:template>

使用示例

  • 调用模板:
    <xsl:call-template name="convert-to-duration">
      <xsl:with-param name="hours" select="5"/>
    </xsl:call-template>
    
    输出:PT5H
  • 调用模板:
    <xsl:call-template name="convert-to-duration">
      <xsl:with-param name="hours" select="5.5"/>
    </xsl:call-template>
    
    输出:PT5H30M

内容的提问来源于stack exchange,提问作者Simran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 19:00:59