如何将'date'格式转换为UTC格式

How to convert 'date' format to UTC format

在下面的示例中,我们试图将 'date' 从一种格式转换为另一种格式,就像要转换成 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>

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

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

<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})', '--T::')"/>
    </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>

您可以解析出日期和时间的组成部分,然后使用带有 xs:date()xs:time() 参数的 fn:dateTime() 函数,并将其放入专门的模板匹配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>