2014-05-19 201 views
1

我们收到的日期节点的XML文件,如下所示:的ColdFusion - 解析字符串日期到日期时间格式

<createdDate>1/11/2008 7:04:28 a.m.</createdDate> 

日期是英国格式DD/MM/YYY,那么2008年1月11日是11月1日2008.

我们运行一个coldfusion函数来解析xml并插入到数据库中。相关的数据库字段是datetime数据类型,需要保持这种状态。我该如何将日期的字符串表示形式格式化为数据库将接受的格式?

+0

你正在运行什么版本的CF? –

+1

您是否试过['parseDateTime'](https://wikidocs.adobe.com/wiki/display/coldfusionen/ParseDateTime)或['lsParseDateTime'](https://wikidocs.adobe.com/wiki/display/) coldfusionen/LSParseDateTime)功能? – Antony

+4

我建议要求XML文件的提供者将日期格式更改为更加标准化的内容。 – andrewdixon

回答

2

不是一个理想的情况,但是您获取数据的格式,特别是am/pm字符串中的点使得它很难阅读,并且最重要的是它以英国日期格式。这可以帮助:

<cfset x="21/11/2008 7:04:28 p.m."> 
<cfset x=Replace(x,".","","All")> 
<cfset y=LSDateFormat(x,"mm/dd/yyyy","English (UK)")> 
<cfoutput> 
    x====#x# 
    <br/>y===#y# 
<cfset z=CreateDateTime(Year(y),month(y),day(y),hour(x),minute(x),second(x))> 
z====#z# 
<cfset someDatevare=LSParseDateTime(x,"English (UK)")> 
</cfoutput> 


编辑作为利提到,去除串周期或任何其他非标准的字符,然后LSParseDateTime将返回日期时间对象。

+0

它工作。太棒了,谢谢我的朋友。 – user460114

+2

是的,“am/pm”中的非标准时段是阻止CF隐式转换字符串的原因。这一方一旦被移除,使用['LSParseDateTime()'](http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-70e3.html)就像@Antony建议的那样效率更高。与'LSDateFormat'不同,'LSParseDateTime'已经返回一个日期对象。所以你可以跳过'CreateDateTime'调用和隐式字符串/日期转换。 – Leigh

+0

好的建议Leigh。在答案中加上这一点,这样可以帮助未来的读者。 –