如何将 24 小时格式时间转换为 12 小时格式作为 WSO2 ESB 中的 属性
How to convert 24 hour format time in to 12 hour Format as a Property in the WSO2 ESB
我正在尝试将 wso2 4.9.0 负载中的 24 小时制转换为 12 小时制。
有什么办法可以用payload转换吗
原时间是22:45:16
需要转换为 10:45:16 PM
你可以这样使用:
<payloadFactory media-type="json">
<format>
{"time":""}
</format>
<args>
<arg evaluator="xml" expression="get-property('SYSTEM_DATE', 'hh:mm a')"/>
</args>
</payloadFactory>
我不知道为什么您必须只使用 payloadFactory 或在 payloadfactory 下执行此操作。在那里你只能使用 xpath 到 'convert',正如你在下面看到的,它非常讨厌而且不完美。如果我记得在 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":"", "scriptTime":"", "xpathTime":""}</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,':')) <= 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>
我正在尝试将 wso2 4.9.0 负载中的 24 小时制转换为 12 小时制。 有什么办法可以用payload转换吗
原时间是22:45:16
需要转换为 10:45:16 PM
你可以这样使用:
<payloadFactory media-type="json">
<format>
{"time":""}
</format>
<args>
<arg evaluator="xml" expression="get-property('SYSTEM_DATE', 'hh:mm a')"/>
</args>
</payloadFactory>
我不知道为什么您必须只使用 payloadFactory 或在 payloadfactory 下执行此操作。在那里你只能使用 xpath 到 'convert',正如你在下面看到的,它非常讨厌而且不完美。如果我记得在 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":"", "scriptTime":"", "xpathTime":""}</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,':')) <= 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>