如果我运行查询:
<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'}
如何保留日期时间?
或者,我如何将时间戳重新格式化为日期时间?
答案 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中更清楚地说明(并占用更多空间)。