首页 > 解决方案 > 如何将 24 小时格式时间转换为 12 小时格式作为 WSO2 ESB 中的属性

问题描述

我试图在 wso2 4.9.0 有效负载中将 24 小时转换为 12 小时。有什么方法可以使用有效负载进行转换。

原始时间是 22:45:16

需要转换为晚上 10:45:16

标签: wso2wso2esbwso2carbonwso2ei

解决方案


我不知道为什么你必须只使用 payloadFactory 或在 payloadfactory 下这样做。在那里,您只能使用 xpath 来“转换”,如下所示,它非常讨厌且不完美。如果我记得在 wso2esb 4.9.0 中,已经有 ScriptMediator,它会更好。我在 wso2ei 6 上进行了测试。

<sequence name="time" xmlns="http://ws.apache.org/ns/synapse">
   <property expression="//time/text()" name="time" scope="default" type="STRING" xmlns:ns="http://org.apache.synapse/xsd"/>
   <script language="js"><![CDATA[
   var timeIn = mc.getProperty('time');   
   var displayFormat = new java.text.SimpleDateFormat("hh:mm:ss a");   
   var parseFormat = new java.text.SimpleDateFormat("HH:mm:ss");
   mc.setProperty('scriptTime', displayFormat.format(parseFormat.parse(timeIn)));
   ]]></script>
   
   <payloadFactory media-type="json">
       <format>{"inputTime":"$1", "scriptTime":"$2", "xpathTime":"$3"}</format>
       <args>
           <arg evaluator="xml" expression="$ctx:time" literal="false" xmlns:ns="http://org.apache.synapse/xsd"/>
           <arg evaluator="xml" expression="$ctx:scriptTime" literal="false" xmlns:ns="http://org.apache.synapse/xsd"/>
           <arg evaluator="xml"
               expression="concat(concat(substring(number(substring-before($ctx:time,':'))+12, 1 div (number(substring-before($ctx:time,':')) = 0)),substring(number(substring-before($ctx:time,':'))-12, 1 div (number(substring-before($ctx:time,':')) > 12)),substring(number(substring-before($ctx:time,':')), 1 div (number(substring-before($ctx:time,':')) &lt;= 12 and number(substring-before($ctx:time,':')) > 0 )),),':',substring-after($ctx:time,':') , concat(substring(' PM', 1, number(number(substring-before($ctx:time,':')) > 11) * string-length(' PM')),substring(' AM', 1, number(not(number(substring-before($ctx:time,':')) > 11)) * string-length(' AM'))))"
               literal="false" xmlns:ns="http://org.apache.synapse/xsd"/>
        </args>
    </payloadFactory>

    <log level="custom">
        <property expression="$ctx:time" name="time" xmlns:ns="http://org.apache.synapse/xsd"/>
        <property expression="$ctx:scriptTime" name="scriptTime" xmlns:ns="http://org.apache.synapse/xsd"/>
        <property expression="//xpathTime" name="xpathTime" xmlns:ns="http://org.apache.synapse/xsd"/>
    </log>
    <respond/>
</sequence>

推荐阅读