【问题标题】:Convert 12 hour format date into 24 hour in XSLT1.0 or XSLT2.0在 XSLT 1.0 或 XSLT 2.0 中将 12 小时格式日期转换为 24 小时
【发布时间】:2016-03-07 06:51:23
【问题描述】:

我需要将日期从 12 小时格式转换为 24 小时格式。

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

预期输出: 201601271901(YYYYMMDDHHMM)

我在代码中使用了 format-dateTime() 函数,但出现错误

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

错误:

描述:FORG0001:无效的 dateTime 值“01/27/2016 07:01:36 PM”(非数字年份组件)

请帮忙解决这个问题

【问题讨论】:

    标签: xslt xslt-1.0 xslt-2.0


    【解决方案1】:

    您的输入不是有效的 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>
    

    请注意,这假设您的天数用零填充到两位数(就像您的月份一样)。

    如果你需要在多个地方使用这个,可以考虑把它变成一个函数。

    【讨论】:

    • 感谢您的回复。它正在使用上面的代码。
    【解决方案2】:

    format-dateTimexs:dateTime? 作为第一个参数。 part_needed/promised_dtnode

    如果您有标准 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) 之类的东西来获取每个日期/时间部分。

    【讨论】:

    • 感谢您对问题的解释。我会试试上面的功能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 2010-10-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多