【问题标题】:How to calculate year old date range from the current date(EDT) in xslt 1.0如何从 xslt 1.0 中的当前日期(EDT)计算旧日期范围
【发布时间】:2021-09-22 08:53:51
【问题描述】:

请有人建议我使用 XSLT 1.0 从 EDT 格式的当前日期时间计算 1 年前的日期时间。

我知道使用 xslt 2.0 有类似“yearMonthDuration”的功能,但需要在 xslt 1.0 中执行。

我有这个 ''' 2021-09-21 美国东部时间 11:14:20 ''' 我需要获得 20200921111420 EDT。这是我需要转换的格式,如图所示 YYYYMMDDTTMMSS EDT

请在这方面提供帮助。

【问题讨论】:

  • 您打算使用哪个 XSLT 1.0 处理器?以及如何获得当前日期(XSLT 1.0 不支持这一点)。 “岁的日期范围”到底是什么意思?请编辑您的问题并显示您期望得到的确切结果。

标签: datetime xslt


【解决方案1】:

EXSLT.Date 有一些支持,例如

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:date="http://exslt.org/dates-and-times"
  exclude-result-prefixes="xs date">

  <xsl:template match="date">
    <xsl:copy>
      <xsl:value-of select="concat(., ' - ', date:add(., 'P1Y'))"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

给出&lt;date&gt;2021-09-22 - 2022-09-22&lt;/date&gt; 的输入,例如&lt;date&gt;2021-09-22&lt;/date&gt;.

因此请检查您是否使用支持该功能的处理器,或者可以使用 XSLT 处理器的扩展,对于 .NET XslCompiledTransform,有一个带有 https://www.nuget.org/packages/Mvp.Xml.NetStandard/ 的处理器。

【讨论】:

    【解决方案2】:

    我可以提取年份列并将 365 添加到此行吗?

    如果您只想将 1 年添加到给定日期,您可以从提取年组件开始,然后简单地向其添加 1,而将月和日组件保留原样。但是,如果给定的日期是闰年的 2 月 29 日,这将产生无效的日期。尽管如此,纠正它还是相当简单的——比如:

        <xsl:value-of select="substring($given-date, 1, 4) + 1"/>
        <xsl:variable name="md" select="substring($given-date, 5, 10)" />
        <xsl:choose>
            <xsl:when test="$md='-02-29'">-02-28</xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$md"/>
            </xsl:otherwise>
        </xsl:choose>
    

    添加:

    我有这个 ''' 2021-09-21 11:14:20 EDT ''' 我需要得到 20200921111420 EDT

    这同样简单:

        <xsl:value-of select="substring($given-date, 1, 4) - 1"/>
        <xsl:variable name="mdt" select="translate(substring($given-date, 6, 14), '-: ', '')" />
        <xsl:choose>
            <xsl:when test="starts-with($mdt, '0229')">
                <xsl:text>0228</xsl:text>
                <xsl:value-of select="substring($mdt, 5)"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$mdt"/>
            </xsl:otherwise>
        </xsl:choose>
        <xsl:value-of select="substring($given-date, 20)"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-08
      • 1970-01-01
      相关资源
      最近更新 更多