Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 将不同的日期时间格式转换为ISO 8601格式_Xml_Xslt - Fatal编程技术网

Xml 将不同的日期时间格式转换为ISO 8601格式

Xml 将不同的日期时间格式转换为ISO 8601格式,xml,xslt,Xml,Xslt,我有一个lastUpdatedAt参数,它可以包含以下日期时间格式: "lastUpdatedAt": "2017-09-09T01:30:42.560" "lastUpdatedAt": "2019-07-26T13:51:08.000+0100", "lastUpdatedAt": "2019-07-26T23:58:47+12:00", "lastUpdatedAt": "2019-03-21T12:35:35Z", 我希望的输出格式如下: "lastUpdatedAt": "2019-

我有一个lastUpdatedAt参数,它可以包含以下日期时间格式:

"lastUpdatedAt": "2017-09-09T01:30:42.560"
"lastUpdatedAt": "2019-07-26T13:51:08.000+0100",
"lastUpdatedAt": "2019-07-26T23:58:47+12:00",
"lastUpdatedAt": "2019-03-21T12:35:35Z",
我希望的输出格式如下:

"lastUpdatedAt": "2019-07-21T12:47:44.000Z"
我尝试了以下方法,但这当然不适用于所有格式:

<xsl:template match="string[@key='lastUpdatedAt']">
    <xsl:variable name="iso-dateTime" select="replace(. ,'^(\d{2})-(\d{2})-(\d{4})\s+(.*)([+-])(\d{2})(\d{2})','$3-$1-$2T$4$5$6:$7')" />
    <string key="lastUpdatedAt">
         <xsl:value-of select="adjust-dateTime-to-timezone(xs:dateTime($iso-dateTime), xs:dayTimeDuration('PT0H'))"/>
    </string>
</xsl:template>


关于如何将这些不同的数据时间格式转换为所需的输出,有什么帮助吗?

我已经尝试用

adjust-dateTime-to-timezone(xs:dateTime(replace(., '(\+|-)([0-9]{2})([0-9]{2})$', '$1$2:$3')), xs:dayTimeDuration('PT0H'))
然后我得到的结果是
2017-09-09T01:30:42.56Z 2019-07-26T12:51:08Z 2019-07-26T11:58:47Z 2019-03-21T12:35:35Z

因此,在模板匹配单个值的上下文中,您可以使用

<xsl:template match="string[@key='lastUpdatedAt']">
    <string key="lastUpdatedAt">
         <xsl:value-of select="adjust-dateTime-to-timezone(xs:dateTime(replace(., '(\+|-)([0-9]{2})([0-9]{2})$', '$1$2:$3')), xs:dayTimeDuration('PT0H'))"/>
    </string>
</xsl:template>


对于四种输入格式中的哪一种,转换为
xs:dateTime
并使用
将dateTime调整为时区的直接方法不起作用?这只是第二种格式吗?@MartinHonnen,对于这一种:``“lastUpdatedAt”:“2019-07-26T13:51:08.000+0100”```我得到一个错误,时区小时必须是两位数,但其余的也没有真正转换为UTC。