当前位置: 首页 > 知识库问答 >
问题:

如何将日期格式转换为UTC格式

宰父正真
2023-03-14

在下面的示例中,我们正在尝试将“日期”从一种格式转换为其他格式,例如要转换为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

共有1个答案

柳鸿信
2023-03-14

您还可以使用正则表达式解析日期和时间组件。正则表达式和捕获组的示例以构造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>

您可以解析出日期和时间的组件,然后将函数与xs:date()和xs:time()参数一起使用,并将其放入与finish\u 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>
 类似资料:
  • 问题内容: 我从服务器获取UTC时区的字符串日期,我需要将其转换为本地时区。 我的密码: 此打印- utc:2015-04-01T11:42:00.269Z,日期:可选(2015-04-01 11:42:00 +0000) 如果我删除 它打印 utc:2015-04-01T11:42:00.269Z,日期:可选(2015-04-01 08:42:00 +0000) 我的当地时区是UTC +3,在第

  • 我想把这个2021年1月20日20:10:14转换成yyyy-MM-dd'T'HH:MM:ss格式。Android系统中的SSS'Z'。目前我正在使用函数,但当我转换为本地格式时,我没有得到原始时间

  • 我有一个方法可以生成一个随机的日期和时间。 打印输出类似于 我见过几个这样的问题和页面,但他们没有给我一个线索。

  • 问题内容: 如何获得日期的毫秒时间?我有以下代码。 此变量beginupd包含格式 2011年10月12日星期三11:55:03 GMT + 05:30 现在如何在Long数据类型中将此格式转换为毫秒时间?非常感谢您的任何帮助,并在此先感谢… 问题答案: JavaDoc指出: 返回自此Date对象表示的自格林尼治标准时间1970年1月1日00:00:00以来的毫秒数。

  • 问题内容: 我正在使用需要json日期格式的API。 我需要转换我的JavaScript日期 1970年1月17日星期六格林尼治标准时间+0100(浪漫标准时间) 以json日期格式 /日期(1405699200)/ 问题答案: 列各项可以吗?

  • 问题内容: 我有一个输出数据数组的PHP脚本。然后将其转换为使用函数。 我的问题是我的数组中有一个日期,但日期格式不正确。 我怎样才能在PHP中转换它呢? 代替上面的日期,我需要等效的JavaScript函数 新的Date() 当我输出上述内容时,我得到以下内容:“ Fri Jun 01 2012 11:08:48 GMT + 0100(GMT Daylight Time)”但是,如果我将PHP日