我需要将日期从12小时格式转换为24小时格式。
输入: 01/27/2016 07:01:36 PM
预期输出 201601271901(表示为yyyymmddhhmm)
我在我的代码中使用了format-dateTime()函数,我收到错误
<xsl:value-of select="format-dateTime(part_need/promised_dt,'[Y0001][M01][D01][H01][m01]')"/>
错误:
描述:FORG0001:无效的dateTime值&#34; 01/27/2016 07:01:36 PM&#34; (非数字年份组件)
请帮助解决这个问题
答案 0 :(得分:0)
format-dateTime将xs:dateTime?
作为第一个参数。 part_needed/promised_dt
是node
。
如果您有标准ISO格式的日期时间(例如“2006-01-27T19:01:36”),则可以使用xs:dateTime(part_needed/promised_dt)
。
Saxon没有非标准的日期时间解析器助手,因此您需要使用xs:dateTime(xs:date(year,month,day), xs:time(hours, minutes, seconds))
构造函数并使用类似substring(part_needed/promised_dt,1,2)
的内容来获取每个日期/时间部分。
答案 1 :(得分:0)
您的输入不是有效的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>
请注意,这假设您的日期是零填充到两位数(就像您的月份一样)。
如果您需要在多个地方使用此功能,请考虑将其转换为功能。