ColdFusion:如何解析dd/mm/yyyy格式的日期?

4
我发现了ParseDateTime函数,但它只能按照英语(美国)的约定解析日期/时间字符串。
如何解析dd/mm/yyyy格式的日期?
试试这个:
<cfset TestdateFrom = ParseDateTime("10/9/2010") />
<cfloop index="i" from="1" to="30" step="1">
    <cfset TestdateFrom = DateAdd( "d", 1, TestdateFrom ) />
    #TestdateFrom#<br/>
</cfloop>

在CF9中有一个LSParseDateTime函数。
我不知道这是否对我有帮助。
最后,我应该使用Java库来解决这个问题吗?

你究竟想要做什么,或者你想得到什么最终结果? - crosenblum
4个回答

7

看起来这个正在工作:

<cfset formatter = createObject("java","java.text.SimpleDateFormat")>
<cfset formatter.init("dd/MM/yyyy")>
<cfset newDate = formatter.parse("10/09/2010")>
#newDate#

有其他建议吗?

1
我用这种方法取得了很好的成功 - 它是灵活的,并且适用于各种格式化日期,而纯 ColdFusion 方法则不能做到这一点。 - David Faber

5
如果您的格式是一致的,您也可以像这样做:
<cfset dy=listGetAt(dateString,1,"/")>
<cfset mo=listGetAt(dateString,2,"/")>
<cfset yr=listGetAt(dateString,3,"/")>

<cfset myDate=createDate(yr,mo,dy)>

但是,实际上,Tim的答案是最好的。


3

您需要使用lsParseDateTime()函数。这是特定于地区的日期解析器。

您可以直接将语言环境传递到该函数的第二个参数中,或者使用setlocale()函数设置请求的语言环境。

您可能还会发现查看其他以LS为前缀的函数也很有用。


3

我使用以下技巧处理以自由文本形式输入的(英国格式)日期,此方法非常有效:

<cfset SetLocale("English (UK)")>
<cfset valid = true>

<!--- Convert DD-MM-YYYY or DD.MM.YYYY to DD/MM/YYYY --->
<cfset dt = replacelist(dt, ".,-", "/,/")>

<!--- count date elememnts (must be 3 - LSParseDateTime will make potentially incorrect assumptions otherwise) --->
<cfif listlen(dt, "/") neq 3>
    <!--- wrong number of elements --->
    <cfset valid = false>
<cfelse>
    <!--- Correct number of elements so try to interpret as date/time object --->   
    <cftry>
        <cfset dt = LSParseDateTime(dt)> 
        <cfcatch type="Expression">
            <cfset valid = false>
        </cfcatch>
    </cftry>
</cfif>

如果在这个过程结束时valid为真,则表示dt中的字符串日期表示已转换为日期/时间对象。replacelist步骤允许将日期输入为DD.MM.YYYY、DD-MM-YYYY或DD/MM/YYYY。

忘了提到LSParseDateTime自至少4.5版本以来就已经可用,以防有人阅读此内容并认为它是CF9中的新功能。 - TimDawe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接