如果我运行查询:
<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'}
我应该怎么做才能保留日期时间?
或者,我如何将时间戳重新格式化为日期时间?
请您参考如下方法:
您几乎可以肯定什么都不担心。您只是在查看日期/时间对象在其 toString
时返回的内容。方法被调用,ColdFusion 使用它能够在屏幕上输出一些东西(需要是字符串数据)。您正在查看的各种值都是完全有效的日期/时间类型,只是不同的类实现了 toString
。不同的。您的代码将处理对象,而不是其值的字符串表示形式,因此这不是问题。
听起来你只是从数据库结果或构造的查询中输出原始值而不格式化它,因此意味着 CF 需要通过其默认值将其转换为字符串 toString
方法,正如我在上面所说的 toString
方法因一个 DateTime 实现而异(数据库中的对象类不同于 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>
(分别基于您提供给我们的信息)。
这将返回并以您指定的格式显示日期对象值,而不是让 CF 使用其默认值。
仅针对显示 执行此操作。对于任何日期操作,只需保持原样即可。您只是觉得这里有些“错误”,因为您不了解 CFML 中的日期是对象,而不仅仅是人类可读的字符串。 CF 并没有 - 但是 - 对此感到困惑 ;-)
我在这个 article about date/time objects and their string representations 中更清楚地讨论了这个问题(并占用了更多空间) ,如果你想看一看。