coldfusion querynew()将日期时间转换为时间戳,这令人恼火

coldfusion querynew()将日期时间转换为时间戳,这令人恼火,coldfusion,Coldfusion,如果我运行查询: <cfquery name="gGet" datasource="#application.datasource#"> select dateuploaded from table </cfquery> 但是,如果我创建一个新的查询对象并在其中插入datetime <cfset qReturn = queryNew("deployDate", "Date")> <cfoutput query="qGet" startrow="1

如果我运行查询:

<cfquery name="gGet" datasource="#application.datasource#">
   select dateuploaded from table
</cfquery>
但是,如果我创建一个新的查询对象并在其中插入datetime

<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'}

我应该怎么做才能保留日期时间


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

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

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


#gGet.dateuploaded[1].dateTimeFormat(“yyyy-mm-dd HH:nn:ss”)#


#qReturn.deployDate[1].dateTimeFormat(“yyyy-mm-dd HH:nn:ss”)#
(分别基于您提供给我们的信息)

这将以您指定的格式返回并显示日期对象值,而不是让CF使用其默认值

仅在显示时执行此操作。对于任何日期操作,请保持原样。您只会感觉到这里有“错误”,因为您不理解CFML中的日期是对象,而不仅仅是人类可读的字符串。不过,CF不会对此感到困惑;-)


如果您想看一看的话,我将在本文中以更清晰(并占用更多空间)的方式对此进行讨论。

您使用的是QueryNew()吗?如果是这样的话,那么使用您为此编写的代码片段将非常有用。对不起,我确实在其中包含了代码,但没有在其周围放置代码标记。您可以使用LSDateFormat()和LSTimeFormat()重新引入格式。您可能需要更改queryNew()以使用字符串。问题是你会有一个字符串而不是日期
{ts'2012-12-01 12:46:00'}
到底出了什么问题?它阻止你做什么?可能是。这就是为什么重审案件会有所帮助。我倾向于选择日期/时间戳。把日期当作字符串处理往往会导致一整套不同的问题。我不同意。我也经历过类似的事情。我现在无法访问我的任何代码,但场景是使用db查询和cf QueryNew执行q对q的操作。我原以为一次约会等于另一次约会,但事实并非如此。我不记得我是如何解决的,但这不是一个非问题。因此我说“几乎肯定”,而不是“绝对”。根据所提供的信息和所问的问题,这几乎可以肯定是一个什么都不担心的情况。本·纳德尔(Ben Nadel)在博客中也提到了类似的问题@user460114从Ben的文章中缺乏有用的细节可以看出,他只是在那里遇到了一个问题,因为他把日期和字符串弄错了:学童错误。也可能是你所经历的,但你的问题中没有任何东西表明情况就是这样。(我只是在5年后才重温这篇文章,因为有人刚刚否决了我的答案,所以我添加了一些澄清,并发现了你的后续评论。希望我澄清的答案可能对将来的人有所帮助)。
<cfset qReturn = queryNew("deployDate", "Date")>
<cfoutput query="qGet" startrow="1" maxrows="7">
    <cfset queryAddRow(qReturn)>
    <cfset querySetCell(qReturn,"deployDate",qGet.dateuploaded)>
</cfoutput>