在CF10中,如何识别对象是日期字符串还是日期对象?
myDateString = '2015-05-05';
myDateObject = createDate( 2015, 5, 5 );
我尝试过isDate(),isValid('date'),isValid('string')。所有这些函数都为两个变量提供相同的答案('YES')。但是,lsParseDateTime( myDateObject )
会抛出错误,因此我需要在运行lsParseDateTime函数之前检查对象类型。
PS。 parseDateTime( myDateObject )
工作正常,这让我想知道lsParseDateTime是不是应该抛出错误。在Railo 4.2中,lsParseDateTime( myDateObject )
工作正常。
答案 0 :(得分:11)
您可以利用所有CFML对象也是Java对象的事实,并使用Java方法:
myDateString = '2015-05-05';
myDateObject = createDate( 2015, 5, 5 );
writeOutput(myDateString.getClass().getName());
writeOutput("<br>");
writeOutput(myDateObject.getClass().getName());
这会产生:
java.lang.String
coldfusion.runtime.OleDateTime
答案 1 :(得分:2)
另一种选择是将isInstanceOf(obj, "typeName")用于coldfusion.runtime.OleDateTime
或java.util.Date
(超类):
isInstanceOf(myDateObject, "coldfusion.runtime.OleDateTime");
isInstanceOf(myDateObject, "java.util.Date");
IsInstanceOf
提供了更大的灵活性,因为它还允许检查继承的类。但是,请记住,函数比比较字符串类名称更重要。
<强>更新强>
让我想知道lsParseDateTime是不是应该抛出一个 错误
这取决于您的POV。根据{{3}},LSParseDateTime
在所有平台上使用&#34; .. Java标准语言环境格式规则&#34; 并期望日期字符串&#34 ; ...采用当前语言环境中可读的格式&#34; 。 ParseDateTime
具有类似的规则,但它仅使用英语(美国)语言环境约定。当CF日期对象被隐式转换为字符串时,它会产生类似{ts '2015-05-18 16:06:10'}
的值。从技术上讲,这不是一个可解析的&#34;根据{{3}}的字符串。因此,如果ParseDateTime
严格遵守规则,那么它也无效。
也就是说,大多数CF日期函数都接受日期对象和日期字符串,所以除非有一些实际限制,LSParseDateTime
也应该接受日期对象。