在 XSLT 1.0 或 XSLT 2.0 中将 12 小时制日期转换为 24 小时制
Convert 12 hour format date into 24 hour in XSLT1.0 or XSLT2.0
我需要将日期从 12 小时格式转换为 24 小时格式。
输入:
2016 年 1 月 27 日 07:01:36 下午
预期输出:
201601271901(YYYYMMDDHHMM)
我在代码中使用了 format-dateTime() 函数,出现错误
<xsl:value-of select="format-dateTime(part_need/promised_dt,'[Y0001][M01][D01][H01][m01]')"/>
错误:
描述:FORG0001:无效的日期时间值“01/27/2016 07:01:36 PM”(非数字年份部分)
请帮忙解决这个问题
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)
之类的东西来获取每个 date/time 部分.
您输入的不是有效的 ISO 8601 date/time,因此您无法使用内置的 date/time 函数。
试试类似 (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>
请注意,这假设您的天数被零填充为两位数(您的月份也是如此)。
如果你需要在多个地方使用它,考虑把它变成一个函数。
我需要将日期从 12 小时格式转换为 24 小时格式。
输入: 2016 年 1 月 27 日 07:01:36 下午
预期输出: 201601271901(YYYYMMDDHHMM)
我在代码中使用了 format-dateTime() 函数,出现错误
<xsl:value-of select="format-dateTime(part_need/promised_dt,'[Y0001][M01][D01][H01][m01]')"/>
错误:
描述:FORG0001:无效的日期时间值“01/27/2016 07:01:36 PM”(非数字年份部分)
请帮忙解决这个问题
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)
之类的东西来获取每个 date/time 部分.
您输入的不是有效的 ISO 8601 date/time,因此您无法使用内置的 date/time 函数。
试试类似 (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>
请注意,这假设您的天数被零填充为两位数(您的月份也是如此)。
如果你需要在多个地方使用它,考虑把它变成一个函数。