2013-11-23 24 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