2013-11-23 47 views
3

我想解析兩個日期字符串到日期對象中。該代碼適用於一個字符串,但會爲另一個字符串引發「無效的日期時間」錯誤。唯一的區別就是它一開始就有一個「星期六」!請告訴我爲什麼會發生這種情況,以及我如何解決這個問題!ColdFusion:錯誤傳遞日期沒有星期幾?

<cfset datetimetest1 = "23 Nov 2013 00:53:12 +0000"> 
    <!---^This throws an error (when you try to pass it). Error says 'invalid date time' ---> 

    <cfset datetimetest2 = "Sat, 23 Nov 2013 00:53:12 +0000"> 
    <!---^This works when it is parsed ---> 

    <cfoutput> 
    #parsedatetime(datetimetest1)# #parsedatetime(datetimetest2)# 
    </cfoutput> 
+0

你是如何接收擺在首位這一信息?表單提交? –

回答

0

更新:

由於CF10 +,你可以使用自定義格式字符串,指示如何解析和輸入轉換成DateTime對象的功能:

// Custom format string 
dateObject = parseDateTime("23 Nov 2013 00:53:12 +0000" 
          , "dd MMM yyyy HH:mm:ss zzz"); 

這是CF的靈活性和易用性可能成爲IMO缺點的一個領域。不幸的是parseDateTime不允許你指定輸入字符串的格式,所以CF必須做很多猜測才能「自動」將字符串轉換爲日期對象

CF使用的工具之一是java的SimpleDateFormat類,它利用模式將字符串解析或轉換爲Dates。我的理解是CF維護一個標準的日期/時間模式列表(根據美國約會)。您的第一個字符串不能與任何這些模式匹配。因此錯誤。

如果你的日期字符串總是在UTC,你可以簡單地使用列表功能,省略了時區,即+0000偏移,然後解析字符串像往常一樣:

<cfscript> 
    origString = "23 Nov 2013 00:53:12 +0000"; 
    dateString = listFirst(origString, "+"); 
    WriteDump(parseDateTime(dateString)); 
</cfscript> 

或者你也可以DIY使用的SimpleDateFormat和適當的模式dd MMM yyyy HH:mm:ss Z(見Date and Time Patterns)。只要注意返回的日期是在本地時間,所以你可能需要使用DateConvert如果你想UTC時間:

// get formatter based on default locale 
formatter = createObject("java", "java.text.SimpleDateFormat").init(); 
// set up pattern for input date string 
formatter.applyPattern("dd MMM yyyy HH:mm:ss Z"); 
// parse it into a date object 
dateObject = formatter.parse("23 Nov 2013 00:53:12 +0000"); 
// display result in local and UTC time 
WriteDump("local="& dateObject); 
WriteDump("utc="& DateConvert("local2UTC", dateObject)); 
0

我確定了正在從以下來源使用RSS日期和測試他們對isDate()DateFormat()LSDateFormat()。 ColdFusion 10,286680僅能夠解析65%的日期(58箇中的38個)。

http://rssdateformats.tumblr.com/

https://github.com/mjibson/goread/blob/0387db10bd9fd9ccd90d557fa30b6e494efa577a/goapp/utils.go#L129

這裏的測試腳本,我寫道:

https://gist.github.com/JamoCA/7617349

我一直在尋找一個Java日期解析庫和最近發現的納蒂和StringToTime,但還沒有用過。 (無論是資源提供了一個可下載的JAR文件):

http://natty.joestelmach.com/

https://github.com/collegeman/stringtotime