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

问题描述

我们正在尝试使用XSLT扩展名将DateTime从GMT转换为EST。我们正在使用Java的SimpleDateFormat和TimeZone设置timeZone并对其进行格式化。这是将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>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...