假设我在 cfscript 中有以下函数......返回类型是什么?
[return type goes here] function GetODBCDateTime () {
return CreateODBCDateTime (Now ());
}
提示:这不是
ODBCDateTime
.
最佳答案
简答:看看documentation for cffunction ,显示了可用的返回类型。对于日期和时间对象,使用 date
,不是字符串。尽管除非有特定原因需要 CreateODBCDateTime,否则您可以简单地使用 Now()
反而。在大多数情况下,两者是等效的。
更长的答案:
A date-time object, in ODBC timestamp format
which really means: a string in ODBC timestamp format.
不完全是。尽管它在表示为字符串时确实具有非常特定的格式,但 CreateODBCDateTime 仍然返回一个日期/时间对象。如果转储类信息,可以看到它实际上是java.util.Date的子类, 而不是 java.lang.String。
// string representation
writeDump(GetODBCDateTime().toString());
// base class
writeDump(GetODBCDateTime().getClass().name);
// superclass
writeDump(GetODBCDateTime().getClass().getSuperClass().name);
For example, I can call getClass().getSuperClass().name on the returned object and get java.util.Date, if the return type is either date or string!
你是对的,但这不应该发生 IMO。我不知道 CF 如何在内部处理返回类型,但是......听起来这可能是由于 CF 通常的 automagic-type-conversion工作中的规则 - 或 - 也许 CF 只是使用返回类型来验证对象可以转换为指定类型,如果是这样,则对象将“按原样”返回。但是,您仍然应该使用类型
date
以确保该函数始终返回一个日期对象。否则,它可以返回任何它想要的东西,比如字符串“apple”而不是日期。Dumping either returned object always gives a plain text string.
现在这就是我所期望的。当您 cfdump 任何对象时,CF 通常调用对象的
toString()
方法。顾名思义,它返回对象的字符串表示。使用 CreateODBCDateTime,toString() 旨在以非常特定的格式返回基础日期值 {ts 'yyyy-mm-dd HH:nn:ss'}
.但是,在内部对象仍然是日期。然而,当转储时,它在视觉上与具有相同值的日期字符串相同。 (转储非常适合调试,但 they favor presentation over accuracy ,所以不要总是相信你看到的;-)。
关于coldfusion - 使用 CreateODBCDateTime() 创建的对象的返回类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35325284/