Java XSL使用偏移量比较将UTC时间转换为本地日期时间

Java XSL使用偏移量比较将UTC时间转换为本地日期时间,java,datetime,xslt,xslt-1.0,utc,Java,Datetime,Xslt,Xslt 1.0,Utc,我们收到与UTC时间相关的日期时间元素,如2004-04-12T13:20:00Z 我们希望输出本地日期时间中的日期时间,即相对于UTC时间的偏移量,如2004-04-12T12:20:00-01:00 有人能在XSLT中帮助实现这一点吗? 或者是否存在一个函数模板来实现这一点?假设有这样一个XML测试文件 <?xml version="1.0"?> <root> <val>2004-04-12T13:20:00Z</val> &l

我们收到与UTC时间相关的日期时间元素,如
2004-04-12T13:20:00Z

我们希望输出本地日期时间中的日期时间,即相对于UTC时间的偏移量,如
2004-04-12T12:20:00-01:00

有人能在XSLT中帮助实现这一点吗?

或者是否存在一个函数模板来实现这一点?

假设有这样一个XML测试文件

<?xml version="1.0"?>
<root>
    <val>2004-04-12T13:20:00Z</val>
    <val>2004-05-12T23:20:00Z</val>
    <val>2004-06-12T00:20:00Z</val>
</root>
其产出是:

2004-04-12T13:20:00Z
2004-04-12T12:20:00-01:00
------------------
2004-05-12T23:20:00Z
2004-05-12T22:20:00-01:00
------------------
2004-06-12T00:20:00Z
2004-06-11T23:20:00-01:00
------------------

假设有这样一个XML测试文件

<?xml version="1.0"?>
<root>
    <val>2004-04-12T13:20:00Z</val>
    <val>2004-05-12T23:20:00Z</val>
    <val>2004-06-12T00:20:00Z</val>
</root>
其产出是:

2004-04-12T13:20:00Z
2004-04-12T12:20:00-01:00
------------------
2004-05-12T23:20:00Z
2004-05-12T22:20:00-01:00
------------------
2004-06-12T00:20:00Z
2004-06-11T23:20:00-01:00
------------------

要将给定的日期时间值转换为当前的本地时区,请使用
adjust-dateTime-To-timezone()
函数,而不指定
timezone
参数

例如:

<xsl:variable name="datetime">2004-04-12T13:20:00Z</xsl:variable>
<xsl:value-of select="adjust-dateTime-to-timezone($datetime)"/>
如果在转换时,系统的本地时间与UTC的偏移量为-1小时


重要: 如果您的本地时间与UTC的偏移不是恒定的,而是由于夏令时而发生变化,则这可能不会产生预期的结果。要正确地将2004年4月的日期转换为当时的当地时间,您需要知道该特定时间点的UTC偏移量。XSLT不具备这种功能,您必须在另一个可以访问XSLT的应用程序中进行转换


补充: 所有这些都需要XSLT2.0。既然您现在已经澄清了,那么您实际上是在使用XSLT 1.0:

  • XSLT1.0无法知道当前与UTC的本地偏移量是多少,更不用说给定时间点的偏移量了
  • 有一种方法可以将给定的dateTime值调整为另一个值 时区-提供所需的偏移量作为参数 调用XSL转换时(或偏移量为 常数) 以下是将UTC转换为UTC-1:00(作为常量)的模板示例:

    
    T
    -01:00
    

    演示

    要将给定的日期时间值转换为当前本地时区,请使用
    调整日期时间到时区()
    函数,而不指定
    时区
    参数

    例如:

    <xsl:variable name="datetime">2004-04-12T13:20:00Z</xsl:variable>
    <xsl:value-of select="adjust-dateTime-to-timezone($datetime)"/>
    
    如果在转换时,系统的本地时间与UTC的偏移量为-1小时


    重要: 如果您的本地时间与UTC的偏移不是恒定的,而是由于夏令时而发生变化,则这可能不会产生预期的结果。要正确地将2004年4月的日期转换为当时的当地时间,您需要知道该特定时间点的UTC偏移量。XSLT不具备这种功能,您必须在另一个可以访问XSLT的应用程序中进行转换


    补充: 所有这些都需要XSLT2.0。既然您现在已经澄清了,那么您实际上是在使用XSLT 1.0:

  • XSLT1.0无法知道当前与UTC的本地偏移量是多少,更不用说给定时间点的偏移量了
  • 有一种方法可以将给定的dateTime值调整为另一个值 时区-提供所需的偏移量作为参数 调用XSL转换时(或偏移量为 常数) 以下是将UTC转换为UTC-1:00(作为常量)的模板示例:

    
    T
    -01:00
    

    演示

    假设您正在使用Oracle SOA套件进行转换

    xp20:subtract-dayTimeDuration-from-dateTime (/ns0:Your/@DateTime, concat (&quot;PT&quot;, substring-after (substring-before (xp20:timezone-from-dateTime (xp20:current-dateTime() ), &quot;:&quot; ), &quot;-0&quot; ), &quot;H&quot; ) )
    

    这将解决您的问题

    假设您正在使用Oracle SOA套件进行转换

    xp20:subtract-dayTimeDuration-from-dateTime (/ns0:Your/@DateTime, concat (&quot;PT&quot;, substring-after (substring-before (xp20:timezone-from-dateTime (xp20:current-dateTime() ), &quot;:&quot; ), &quot;-0&quot; ), &quot;H&quot; ) )
    

    这将解决您的问题

    谢谢您的回复。但是我们使用的是xslt1.0处理器,而这似乎用于xslt2.0处理器。你能建议并回答xslt1.0吗?@VJoe为什么你的问题被标记为
    xslt-2.0
    ?我的错。更正为1.0谢谢回复。但是我们使用的是xslt1.0处理器,而这似乎用于xslt2.0处理器。你能建议并回答xslt1.0吗?@VJoe为什么你的问题被标记为
    xslt-2.0
    ?我的错。将其更正为1.0是否可以提供有关如何使用xslt1.0转换此内容的代码?@VJoe如何将其转换为什么?如何将2004-04-12T13:20:00Z转换为2004-04-12T12:20:00-01:00。我们确信我们的偏移值是-1。如何使用xslt1实现这一点。0@michael.hor257k,其中设置了-1参数?我需要+1:-)编辑:使用-3600秒创建。您可以提供有关如何使用xslt1.0转换此内容的代码吗?@VJoe如何将此转换为什么?如何将2004-04-12T13:20:00Z转换为2004-04-12T12:20:00-01:00。我们确信我们的偏移值是-1。如何使用xslt1实现这一点。0@michael.hor257k,其中设置了-1参数?我需要+1:-)编辑:在-3600秒内找到它