如何识别日期字符串与日期对象

时间:2015-05-18 05:27:57

标签: coldfusion coldfusion-10

在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 )工作正常。

2 个答案:

答案 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.OleDateTimejava.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也应该接受日期对象。