如何在XSLT中将dateTime从一个时区转换为另一个时区



我们正在尝试使用XSLT扩展将DateTime从GMT转换为EST。我们使用java的SimpleDateFormat和TimeZone来设置时区并格式化它。这是将时区从一种格式格式化为另一种格式,但不是将DateTime转换为EST。如果我遗漏了什么,有人能帮我吗?

这是我的XSL

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:cal="java.util.GregorianCalendar" xmlns:tz="java.util.TimeZone" xmlns:dt="java.util.Date" xmlns:SimpleDateFormat="java.text.SimpleDateFormat"  exclude-result-prefixes="xsl Extensions java math fn fo xs Extensions sf cal dt" xmlns:math="xalan://java.lang.Math" xmlns:java="http://xml.apache.org/xalan/java">


<xsl:template name="convertGMTDateToEST">
<xsl:variable name="dateString">
<xsl:value-of select="'08/17/20 17:58'" />
</xsl:variable>
<xsl:variable name="inSDF" select="SimpleDateFormat:new('MM/dd/yy HH:mm')"/>
<xsl:variable name="outSDF" select="SimpleDateFormat:new('MM-dd-yy HH:mm')"/>
<xsl:variable name= "inTZ" select="tz:getTimeZone('Asia/Kolkata')"/>
<xsl:variable name= "outTZ" select="tz:getTimeZone('America/New_York')"/>
<xsl:variable name = "setTZToInput" select="SimpleDateFormat:setTimeZone($inSDF,$inTZ)"/>
<xsl:variable name = "setTZToOutput" select="SimpleDateFormat:setTimeZone($outSDF,$outTZ)"/>
<xsl:variable name = "inDate" select="SimpleDateFormat:parse($inSDF,$dateString)"/>
<xsl:variable name= "outDate" select="SimpleDateFormat:format($outSDF,$inDate)"/>
<xsl:value-of select="$outDate" /> 
</xsl:if>
</xsl:template>


</xsl:stylesheet>

当前输出-08-17-20 17:58
预期输出-08-17-20 13:58

注意-我们使用的是Xalan XSLT 1.0引擎-javax.xml.transform.TransformerFactory

您试图将UTC处理为美国/纽约时间,但在输入时区中,您将时间作为IST 传递

你应该低于

<xsl:variable name="inTZ" select="tz:getTimeZone('UTC')"/>

更新的XSLT

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:cal="java.util.GregorianCalendar" xmlns:tz="java.util.TimeZone" xmlns:dt="java.util.Date" xmlns:SimpleDateFormat="java.text.SimpleDateFormat"  exclude-result-prefixes="xsl java math fn fo xs cal dt" xmlns:math="xalan://java.lang.Math" xmlns:java="http://xml.apache.org/xalan/java">

<xsl:template match="/">
<xsl:call-template name="convertGMTDateToEST"></xsl:call-template>
</xsl:template>

<xsl:template name="convertGMTDateToEST">
<xsl:variable name="dateString">
<xsl:value-of select="'08/17/20 17:58'" />
</xsl:variable>
<xsl:message><xsl:value-of select="$dateString"/></xsl:message>
<xsl:variable name="inSDF" select="SimpleDateFormat:new('MM/dd/yy HH:mm')"/>
<xsl:variable name="outSDF" select="SimpleDateFormat:new('MM-dd-yy HH:mm')"/>
<xsl:variable name="inTZ" select="tz:getTimeZone('UTC')"/>
<xsl:variable name="outTZ" select="tz:getTimeZone('America/New_York')"/>
<xsl:variable name="setTZToInput" select="SimpleDateFormat:setTimeZone($inSDF,$inTZ)"/>
<xsl:variable name="setTZToOutput" select="SimpleDateFormat:setTimeZone($outSDF,$outTZ)"/>
<xsl:variable name="inDate" select="SimpleDateFormat:parse($inSDF,$dateString)"/>
<xsl:variable name="outDate" select="SimpleDateFormat:format($outSDF,$inDate)"/>
<xsl:value-of select="$outDate" /> 

</xsl:template>


</xsl:stylesheet>

相关内容

  • 没有找到相关文章

最新更新