在XSLT1.0或XSLT2.0中将12小时格式日期转换为24小时

问题描述:

我需要将日期从12小时格式转换为24小时格式。在XSLT1.0或XSLT2.0中将12小时格式日期转换为24小时

输入: 2016年1月27日下午7时01分36秒

预期输出: 201601271901(为yyyymmddhhmm)

我用格式DATETIME()在我的代码功能,我得到错误

<xsl:value-of select="format-dateTime(part_need/promised_dt,'[Y0001][M01][D01][H01][m01]')"/> 

错误:

说明:FORG0001:无效的日期时间值“2016年1月27日下午7时01分36秒”(非数字年份组成)

在这个问题上

您的输入不是有效的ISO 8601日期/时间,因此您无法使用内置的日期/时间功能。

尝试,而不是像(XSLT 2.0):

<xsl:template match="inputdate"> 
    <xsl:copy> 
     <xsl:variable name="dte" select="tokenize(.,'/|\s|:')" /> 
     <xsl:value-of select="$dte[3]" /> 
     <xsl:value-of select="$dte[1]" /> 
     <xsl:value-of select="$dte[2]" /> 
     <xsl:variable name="h24" select="xs:integer($dte[4]) mod 12 + 12 * xs:integer($dte[7]='PM')" /> 
     <xsl:value-of select="format-number($h24, '00')" /> 
     <xsl:value-of select="$dte[5]" /> 
    </xsl:copy> 
</xsl:template> 

注意,这里假设你的日子是零填充到两个数字(因为是你月)。

如果您需要在多个地方使用此功能,请考虑将其转换为功能。

+0

感谢您的回复。它正在使用上面的代码。 – Jyo

format-dateTime请帮助需要一个xs:dateTime?作为第一个参数。 part_needed/promised_dtnode

如果您具有标准ISO格式的日期时间(例如“2006-01-27T19:01:36”),则可以使用xs:dateTime(part_needed/promised_dt)

撒克逊没有非标准的日期时间解析器帮助器,因此您需要使用xs:dateTime(xs:date(year,month,day), xs:time(hours, minutes, seconds))构造函数并使用类似substring(part_needed/promised_dt,1,2)的内容来获取每个日期/时间部分。

+0

感谢您对该问题的解释。我会尝试以上功能 – Jyo