2012-08-13 118 views
4

xslt 1.0中是否有更优雅的解决方案?我知道有内置的函数为xslt 2.0。将十进制小时转换为小时分秒

我在十进制小时内取一个数字,需要将其表示为HH:MM:SS。目前我有以下功能。

<xsl:variable name="decimal_hours" select="pre_lab_cost div pre_labour_rate"/> 
<xsl:variable name="decimal_minutes" select="number(concat('0.',substring-after($decimal_hours, '.')))*60"/> 
<xsl:variable name="decimal_seconds" select="number(concat('0.',substring-after($decimal_minutes, '.')))*60"/> 
<xsl:value-of select="concat(format-number(floor($decimal_hours), '00'), 
              ':', 
              format-number(floor($decimal_minutes), '00'), 
              ':', 
              format-number(floor($decimal_seconds), '00') 
              )"/> 

回答

8

这个怎么样...

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 

<xsl:variable name="decimal_hours" select="3.14"/> 

<xsl:template match="/"> 
<xsl:value-of select="concat(
    format-number(floor($decimal_hours    ), '00:'), 
    format-number(floor($decimal_hours * 60 mod 60), '00:'), 
    format-number(floor($decimal_hours * 360 mod 360), '00'))"/> 
</xsl:template> 

</xsl:stylesheet> 
+1

我喜欢它,没有考虑一个MOD这在事后看来是愚蠢的。 – Horba 2012-08-13 16:49:44

0

万一有人有问题,我只是有这上面的回答是辉煌的,但我需要采取十进制分钟打入小时:分钟:秒。所以下面 被击穿帮助,如果需要的话,小切背...

<xsl:value-of select="concat(
    format-number(floor($Decimal_Minutes div 60), '00:'), 
    format-number(floor($Decimal_Minutes mod 60), '00:'), 
    format-number(($Decimal_Minutes - floor($Decimal_Minutes)) * 60, '00'))"/> 
相关问题