说我在cfscript中有以下功能......返回类型是什么?
[return type goes here] function GetODBCDateTime () {
return CreateODBCDateTime (Now ());
}
提示:这不是ODBCDateTime
。
答案 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时间戳格式的字符串。