如何在WSO2 Micro Integrator中将时间戳转换为UTC格式
在WSO2 Micro Integrator中将带时区的时间戳转换为UTC格式
你需要将输入的带时区偏移的时间戳(如2020-10-06T08:08:35-04:00)转换为UTC格式,以下是几种在WSO2 MI中可行的实现方式:
方法一:使用Script Mediator(JavaScript)
通过Script Mediator调用JavaScript的Date对象直接处理时间转换,示例配置如下:
<sequence name="ConvertToUTCSequence" xmlns="http://ws.apache.org/ns/synapse"> <script language="js"><![CDATA[ // 从请求JSON中获取时间戳(根据实际请求结构调整路径) var reqPayload = mc.getPayloadJSON(); var inputTimestamp = reqPayload.timestamp; // 解析带时区的时间并转换为UTC格式 var dateObj = new Date(inputTimestamp); var utcTimestamp = dateObj.toISOString(); // 若不需要毫秒部分,可手动截取字符串 // utcTimestamp = utcTimestamp.slice(0, -5) + 'Z'; // 将转换后的时间写回请求体 reqPayload.timestamp = utcTimestamp; mc.setPayloadJSON(reqPayload); ]]></script> </sequence>
转换后示例输入会得到2020-10-06T12:08:35.000Z,如果不需要毫秒段,可通过字符串截取调整格式。
方法二:使用XPath 3.1函数(推荐)
WSO2 MI支持XPath 3.1,可直接通过adjust-dateTime-to-timezone函数完成时区转换,示例配置:
<sequence name="ConvertToUTCSequence" xmlns="http://ws.apache.org/ns/synapse"> <!-- 提取并转换时间戳为UTC,$ctx:INPUT_TIMESTAMP为提前获取的输入时间属性 --> <property expression="adjust-dateTime-to-timezone(xs:dateTime($ctx:INPUT_TIMESTAMP), xs:dayTimeDuration('PT0H'))" name="UTC_TIMESTAMP" scope="default" type="STRING"/> <!-- 拼接Z后缀以符合标准UTC格式 --> <property expression="concat($ctx:UTC_TIMESTAMP, 'Z')" name="FORMATTED_UTC_TIMESTAMP" scope="default" type="STRING"/> <!-- 将转换后的时间替换回请求体(以JSON为例) --> <payloadFactory media-type="json"> <format>{"timestamp": "$1"}</format> <args> <arg evaluator="xml" expression="$ctx:FORMATTED_UTC_TIMESTAMP"/> </args> </payloadFactory> </sequence>
说明:
adjust-dateTime-to-timezone函数接收两个参数:目标时间对象和目标时区偏移(PT0H代表UTC+0时区)- 转换后默认格式为
2020-10-06T12:08:35,通过concat添加Z后缀即可匹配标准UTC格式。
方法三:使用Data Mediator(DataMapper)
如果你的API使用DataMapper做数据映射,可直接在映射规则中配置时间转换:
- 在DataMapper编辑器中,关联源时间字段与目标字段
- 点击目标字段的转换规则,选择
Date->Convert Timezone - 设置源时区为
Auto Detect,目标时区为UTC - 配置输出格式为
yyyy-MM-dd'T'HH:mm:ss'Z'
内容的提问来源于stack exchange,提问作者Arun Lal
相关产品推荐
相关产品推荐

