使用CreateODBCDateTime()创建的对象的返回类型是什么?

时间:2016-02-10 20:29:42

标签: coldfusion coldfusion-10

说我在cfscript中有以下功能......返回类型是什么?

[return type goes here] function GetODBCDateTime () {

    return CreateODBCDateTime (Now ());

}

提示:这不是ODBCDateTime

3 个答案:

答案 0 :(得分:4)

简答:查看documentation for cffunction,其中显示了可用的返回类型。对于日期和时间对象,请使用date不是字符串。虽然除非有特定原因需要CreateODBCDateTime,否则您只需使用Now()即可。对于大多数目的,两者是等价的。

更长的答案:

  

日期时间对象,采用ODBC时间戳格式

     

这实际上意味着:ODBC时间戳格式的字符串。

不完全是。虽然当表示作为字符串时它确实具有非常特定的格式,但CreateODBCDateTime仍然返回日期/时间对象。如果转储类信息,您可以看到它实际上是java.util.Date的子类,而不是java.lang.String。

 // string representation
 writeDump(GetODBCDateTime().toString());
 // base class
 writeDump(GetODBCDateTime().getClass().name);
 // superclass
 writeDump(GetODBCDateTime().getClass().getSuperClass().name);
  

例如,我可以在返回的对象上调用getClass()。getSuperClass()。name,如果返回类型是日期或字符串,则获取java.util.Date!

你是对的,但这不应该发生在IMO。我不知道CF在内部如何处理返回类型,但是......听起来这可能是由于CF通常的automagic-type-conversion规则在起作用 - 或者 - 或者CF只是使用返回类型来验证对象可以转换为指定的类型,如果是,则按“原样”返回该对象。但是,您仍应使用类型date来确保函数始终返回日期对象。否则,它可以返回它想要的任何东西,比如字符串“apple”而不是日期。

  

转储任何返回的对象始终会提供纯文本字符串。

现在我所期望的。当你cfdump任何对象时,CF通常会调用对象的toString()方法。顾名思义,它返回对象的字符串表示形式。使用CreateODBCDateTime,toString()旨在以非常特定的格式{ts 'yyyy-mm-dd HH:nn:ss'}返回基础日期值。但是,内部对象仍然是日期。然而,当转储时,它在视觉上与具有相同值的日期字符串相同。 (转储很适合调试,但是they favor presentation over accuracy,所以不要总是相信你所看到的;-)。

答案 1 :(得分:0)

来自documentation,看起来像是以ODBC时间戳格式构建的DateTime。

答案 2 :(得分:0)

正确答案似乎是string。我想重要的是要记住,字符串在ColdFusion(和Java)中被视为对象。从文档中,CreateODBCDateTime()的返回类型是:

  

日期时间对象,采用ODBC时间戳格式。

在这种情况下,

可以是ODBC时间戳格式的字符串