在XSLT1.0中为Datetime添加3小时

在XSLT1.0中为Datetime添加3小时,xslt,xslt-1.0,Xslt,Xslt 1.0,我有一个值31-Oct-2020 01:03 PM,而不是确切的时间,需要一个三小时的时间窗口。例如,需要在xslt中将值显示为“31-Oct-2020 01:00 PM-31-Oct-2020 04:00 PM”,我可以使用以下方法 <xsl:template name= "get-expected-eta"> <xsl:variable name= "etadatetime" select= "delivery-at&q

我有一个值
31-Oct-2020 01:03 PM
,而不是确切的时间,需要一个三小时的时间窗口。例如,需要在xslt中将值显示为
“31-Oct-2020 01:00 PM-31-Oct-2020 04:00 PM”
,我可以使用以下方法

<xsl:template name= "get-expected-eta">
  <xsl:variable name= "etadatetime" select= "delivery-at" />
  <xsl:if test = "$etadatetime != '' ">

     <xsl:variable name= "etadate" select= "substring($etadatetime, 1, 12)" />
     <xsl:variable name= "etatime" select= "substring($etadatetime, 13, 15)" />
     <xsl:variable name= "etahour" select= "substring($etatime, 1, 2)" />
     <xsl:variable name= "etatimecomponent" select= "substring($etatime, 7, 8)" />

    <xsl:variable name= "begin-time">
      <xsl:choose>
        <xsl:when test= "$etatimecomponent='AM'">
            <xsl:choose>
              <xsl:when test= "$etahour = 12">
                  <xsl:value-of select= "00"/>
              </xsl:when>
              <xsl:otherwise>
                  <xsl:value-of select= "$etahour"/>
              </xsl:otherwise>
            </xsl:choose>
        </xsl:when>
        <xsl:otherwise>
          <xsl:choose>
              <xsl:when test= "$etahour = 12">
                  <xsl:value-of select= "$etahour"/>
              </xsl:when>
              <xsl:otherwise>
                  <xsl:value-of select= "$etahour + 12"/>
              </xsl:otherwise>
            </xsl:choose>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>

    <xsl:variable name= "end-time" >
      <xsl:choose>
        <xsl:when test= "$begin-time + 3 &gt;= 24">
            <xsl:value-of select= "($begin-time + 3) - 24"/>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select= "$begin-time + 3"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>

    <xsl:variable name= "from-time" select = "concat($etahour, ' ',$etatimecomponent)"/>

    <xsl:variable name= "to-time">
      <xsl:choose>
        <xsl:when test= "number($end-time) &gt;= 12">
            <xsl:choose>
              <xsl:when test= "$end-time = 12">
                  <xsl:value-of select= "12"/> PM
              </xsl:when>
              <xsl:otherwise>
                  <xsl:value-of select= "$end-time - 12"/> PM
              </xsl:otherwise>
            </xsl:choose>
        </xsl:when>
        <xsl:otherwise>
          <xsl:choose>
              <xsl:when test= "$end-time = 0">
                  <xsl:value-of select= "12"/> AM
              </xsl:when>
              <xsl:otherwise>
                  <xsl:value-of select= "$end-time"/> AM
              </xsl:otherwise>
            </xsl:choose>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>

    <!-- Expected ETA --> 
    <xsl:value-of select = '$etadate'/>(<xsl:value-of select = '$from-time'/> - <xsl:value-of select = '$to-time'/>)
  </xsl:if>
</xsl:template>

颗粒物
颗粒物
是
是
( - )

您将在此处找到答案:。请注意,您需要将提取日期-时间组件的部分调整为您的格式。您好@michael.hor257k,我尝试过,但没有成功。在您的问题中,您的预期结果是
31-Oct-2020 01:00 PM-31-Oct-2020 04:00 PM
。您的方法返回的
2020年10月31日(下午1点-下午4点)
非常不同。特别是如果你考虑了<代码> 31-OCT-2020 10:45 PM < /代码>:我认为想要的结果是<代码> 31-OCT-2020 10:45 PM -1-NOV-2020:1:45上午< /代码> -但是你的方法产生代码>31-OCT-2020(晚上10点-凌晨1点)<代码> .Migel.HOR257K是的,当31-OCT-2020到10:45 pm时它会失败。你对我如何处理这种情况有什么建议吗?