coldfusion querynew()令人讨厌地将datetime转换为时间戳

时间:2012-12-01 08:02:36

标签: coldfusion

如果我运行查询:

<cfquery name="gGet" datasource="#application.datasource#">
   select dateuploaded from table
</cfquery>

我得到了一个可爱的约会时间如下:

2012-12-01 12:46:00 

但是,如果我创建一个新的查询对象并将日期时间插入其中

<cfset qReturn = queryNew("deployDate", "Date")>
<cfoutput query="qGet" startrow="1" maxrows="7">
    <cfset queryAddRow(qReturn)>
    <cfset querySetCell(qReturn,"deployDate",qGet.dateuploaded)>
</cfoutput>

我收到这个糟糕的时间戳垃圾{ts '2012-12-01 12:46:00'}

如何保留日期时间?

或者,我如何将时间戳重新格式化为日期时间?

1 个答案:

答案 0 :(得分:0)

你几乎肯定无所事事。您只是查看调用其toString方法时日期/时间对象返回的内容,ColdFusion使用该方法可以在屏幕上输出内容(需要是字符串数据)。您正在查看的各种值都将是完全有效的日期/时间类型,只是不同的类以不同的方式实现toString。您的代码将处理对象,而不是其值的字符串表示,因此这不是问题。

听起来像只是从DB结果或构造的查询输出原始值而不格式化它,因此意味着CF需要通过其默认的toString方法将其转换为字符串,正如我上面所说的那样toString方法从一个DateTime实现到另一个不同(来自DB的对象的类与CF用于其自己的日期对象的类不同,因此您看到的是不同的toString实现)。如果一个关心关于输出的内容,就不应该这样做,就像你在这里一样。如果您关心用于显示它的格式,请始终自己将DateTime对象转换为字符串:

<cfoutput>#gGet.dateuploaded[1].dateTimeFormat("yyyy-mm-dd HH:nn:ss")#</cfoutput>

<cfoutput>#qReturn.deployDate[1].dateTimeFormat("yyyy-mm-dd HH:nn:ss")#</cfoutput> (分别根据您提供给我们的信息)。

这将返回&amp;以您指定的格式显示日期对象值,而不是将其保留为CF以使用其默认值。

仅对显示执行此操作。对于任何日期操作,只需保持原样。你只是觉得这里有一些“错误”,因为你不明白CFML中的日期不仅仅是人类可读的字符串。然而,CF并没有因此而感到困惑; - )

如果你想看一下,我会在article about date/time objects and their string representations中更清楚地说明(并占用更多空间)。