Xml 如何在XSLT中将日期时间从一个时区转换为另一个时区
我们正试图通过使用XSLT扩展将日期时间从GMT转换为EST。我们使用java的SimpleDataFormat和TimeZone来设置时区并格式化它。这是将时区从一种格式格式化为另一种格式,但不是将DateTime转换为EST。 如果我遗漏了什么,有人能帮我吗 这是我的XSL-Xml 如何在XSLT中将日期时间从一个时区转换为另一个时区,xml,datetime,xpath,xslt-1.0,xalan,Xml,Datetime,Xpath,Xslt 1.0,Xalan,我们正试图通过使用XSLT扩展将日期时间从GMT转换为EST。我们使用java的SimpleDataFormat和TimeZone来设置时区并格式化它。这是将时区从一种格式格式化为另一种格式,但不是将DateTime转换为EST。 如果我遗漏了什么,有人能帮我吗 这是我的XSL- <?xml version="1.0" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http:
<?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>
我建议您不要使用SimpleDateFormat
,时区
和日期
。这些类设计得很糟糕,而且早已过时,第一个类尤其令人讨厌。我没有在XSLT中使用Java的经验,但我认为可以使用LocalDateTime
和DateTimeFormatter
,这两种方法都可以替代。我尝试将IST更改为UTC,但都不起作用。我们还缺少什么吗?