【问题标题】:How to convert 'date' format to UTC format如何将“日期”格式转换为 UTC 格式
【发布时间】:2021-07-27 12:37:08
【问题描述】:

在下面的示例中,我们尝试将“日期”从一种格式转换为另一种格式,例如希望转换为 UTC 格式。 2021-07-26T18:37:15.490Z

谁能帮忙。

输入 XML:

<?xml version="1.0" encoding="UTF-8"?>
<date>
<finish_dstamp>20190716140831</finish_dstamp>
</date>

现有输出:

<?xml version="1.0" encoding="UTF-8"?>
<date>
<finish_dstamp>20190716140831</finish_dstamp>
</date>

XSLT 代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">

<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

参考网址:https://xsltfiddle.liberty-development.net/pNEj9dB/1

【问题讨论】:

  • 20190716140831代表着什么样的价值?
  • @Martin Honnen - 它代表“YYYYMMDDHHMMSS”格式
  • 但是在您的问题中,您将输入格式示例提供为20190716140831,但将结果格式示例提供为2021-07-26T18:37:15.490Z,这些值不相关吗?如果输入的所有值都不是YYYY-MM-DDTHH:MM:SS 格式,则xs:dateTime 构造函数需要您可以使用具有正确模式的replace 函数来提取子组件和插入- 或@ 的正确替换字符串987654332@ 或: 子组件之间的分隔符。
  • @Martin Honnen - 是的,我分享了结果作为示例。并且想要转换输入应该看起来像它。请建议

标签: xml xpath xslt-1.0 xquery xslt-2.0


【解决方案1】:

您还可以使用正则表达式解析出日期和时间组件。构造 dateTime 值的正则表达式和捕获组示例(您也可以将其解析为 dateTime 以确保有效)

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    version="2.0">
    
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
    
    
    <xsl:template match="finish_dstamp/text()">
        <xsl:sequence select="replace(., '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})', '$1-$2-$3T$4:$5:$6')"/>
    </xsl:template>
</xsl:stylesheet>

一个使用xsl:analyze-string的例子:

<xsl:template match="finish_dstamp/text()">
    <xsl:analyze-string select="." regex="(\d{{4}})(\d{{2}})(\d{{2}})(\d{{2}})(\d{{2}})(\d{{2}})">
        <xsl:matching-substring>
            <xsl:sequence select="xs:dateTime(
                string-join((
                  string-join((regex-group(1),regex-group(2),regex-group(3)), '-'), 
                  string-join((regex-group(4),regex-group(5),regex-group(6)), ':')), 
                'T')) "></xsl:sequence>
        </xsl:matching-substring>
        <xsl:non-matching-substring>
            <xsl:sequence select="."/>
        </xsl:non-matching-substring>
    </xsl:analyze-string>
</xsl:template>

您可以解析出日期和时间的组成部分,然后将fn:dateTime() 函数与xs:date()xs:time() 参数一起使用,并将其放入finish_dstamp/text() 节点上匹配的专用模板中:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    version="2.0">
    
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
    
    
    <xsl:template match="finish_dstamp/text()">
        <xsl:sequence select="dateTime(
            xs:date(
              concat(
                substring(., 1, 4), 
                '-',
                substring(., 5, 2),
                '-',
                substring(., 7, 2)
              )
            ),
            xs:time(
              concat(
                substring(., 9, 2),
                ':',
                substring(., 11, 2),
                ':',
                substring(., 13, 2)
              )
            )
          )"/>
    </xsl:template>
</xsl:stylesheet>

您可以解析出 dateTime 的组件并使用 xs:dateTime() 构造函数:

<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
</xsl:template>


<xsl:template match="finish_dstamp/text()">
    <xsl:sequence select="xs:dateTime(
          concat(
            substring(., 1, 4), 
            '-',
            substring(., 5, 2),
            '-',
            substring(., 7, 2),
            'T',            
            substring(., 9, 2),
            ':',
            substring(., 11, 2),
            ':',
            substring(., 13, 2)
          )
        )"/>
</xsl:template>

样式表>

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
  • 2013-09-14
  • 2023-04-11
相关资源
最近更新 更多