One way would be to do dateOfBirth.time < nnnnnn Where nnnnn is (new Date(-1900, 1,1)).getTime()
By the way be very very wary of Date objects coming back from the database and check what the actual implementation class type is (and not the variable type). Even though java.sql.Timestamp extends java.util.Date they don’t mix. From the Javadocs Note: This type is a composite of a java.util.Date and a separate nanoseconds value. Only integral seconds are stored in the java.util.Date component. The fractional seconds - the nanos - are separate. TheTimestamp.equals(Object) method never returns true when passed an object that isn't an instance of java.sql.Timestamp, because the nanos component of a date is unknown. As a result, theTimestamp.equals(Object) method is not symmetric with respect to the java.util.Date.equals(Object) method. Also, the hashcode method uses the underlying java.util.Date implementation and therefore does not include nanos in its computation. Due to the differences between the Timestamp class and the java.util.Date class mentioned above, it is recommended that code not view Timestamp values generically as an instance of java.util.Date. The inheritance relationship between Timestamp and java.util.Date really denotes implementation inheritance, and not type inheritance. We had great fun tracking down issues in our rules caused by this – our fields were Date classes, but when fetched back from the database the instance type would be Timestamp. The rules worked fine in unit tests and first execution (as they were all new objects the type was java.util.Date) but not on subsequent executions when they were returned from the DB! Thomas From: [email protected] [mailto:[email protected]] On Behalf Of Nancy Henggeler Sent: 09 February 2012 17:24 To: Rules Users List Subject: Re: [rules-users] Low Date question in drools It is a java date. We use some java binding objects to build it. Below is just a sampling of this. The second entry below indicates what to name it in Java, it's java type, what DB2 table (cogentTable) and data field it is coming from (cogentField). The snippets below might not help much. 1) bindHistory((ECDField) object.getElement("dateOfBirth"), this.getDateOfBirthHistory()); 2) <attribute name="dateOfBirth"> <type>Date</type> <cogenTable>W1V0</cogenTable> <cogenField>BIRTH-DATE</cogenField> <description>Date Of Birth</description> </attribute> From: Wolfgang Laun <[email protected]<mailto:[email protected]>> To: Rules Users List <[email protected]<mailto:[email protected]>> Date: 02/09/2012 11:00 AM Subject: Re: [rules-users] Low Date question in drools Sent by: [email protected]<mailto:[email protected]> ________________________________ So what is the Java type of dateOfBirth, please? -W 2012/2/9 Nancy Henggeler <[email protected]<mailto:[email protected]>> Hello Laun, Thank you for your quick response. This date is a date coming from a DB2 date field and is valid in my incoming data. Frankly, I am with you, why not null versus a silly low date as such, arggggh. But since it is coming in as such do you know of a work around? Thank so much, Nancy From: Wolfgang Laun <[email protected]<mailto:[email protected]>> To: Rules Users List <[email protected]<mailto:[email protected]>> Date: 02/09/2012 10:31 AM Subject: Re: [rules-users] Low Date question in drools Sent by: [email protected]<mailto:[email protected]> ________________________________ Why would you want to test for January 1st in year 1? This is not a value an object of type java.util.Date can represent. See that type's javadoc for details, but the epoch begins January 1, 1970. -W On 9 February 2012 17:19, Nancy Henggeler <[email protected]<mailto:[email protected]>> wrote: I have a simple rule where I want to bypass elements that have a low date but drools seems to be interpreting the date different then I am expecting. Drools statement and error follows: ClientSupplement ( dateOfBirth : dateOfBirth != null && != 0001-01-01) throws error -- Error: [Error: badly formatted number: For input string: "001-01-01"] [Near : {... 0001-01-01 ....}] ^ [Line: 1, Column: 1] How do I get drools to understand this low date? I have tried single, double, and no quotes around the low date and all result in a similiar error message. Please Help! -- View this message in context: http://drools.46999.n3.nabble.com/Low-Date-question-in-drools-tp3729940p3729940.html Sent from the Drools: User forum mailing list archive at Nabble.com. _______________________________________________ rules-users mailing list [email protected]<mailto:[email protected]> https://lists.jboss.org/mailman/listinfo/rules-users _______________________________________________ rules-users mailing list [email protected]<mailto:[email protected]> https://lists.jboss.org/mailman/listinfo/rules-users The information contained in this message may be privileged and confidential and protected from disclosure. If you are not the intended recipient of this message, you are hereby notified that any dissemination, distribution, or copying of this communication is strictly prohibited. If you have received this communication in error, please notify us immediately by replying to the message, and please delete it from your computer. _______________________________________________ rules-users mailing list [email protected]<mailto:[email protected]> https://lists.jboss.org/mailman/listinfo/rules-users _______________________________________________ rules-users mailing list [email protected]<mailto:[email protected]> https://lists.jboss.org/mailman/listinfo/rules-users The information contained in this message may be privileged and confidential and protected from disclosure. If you are not the intended recipient of this message, you are hereby notified that any dissemination, distribution, or copying of this communication is strictly prohibited. If you have received this communication in error, please notify us immediately by replying to the message, and please delete it from your computer. ________________________________ ************************************************************************************** This message is confidential and intended only for the addressee. If you have received this message in error, please immediately notify the [email protected] and delete it from your system as well as any copies. The content of e-mails as well as traffic data may be monitored by NDS for employment and security purposes. To protect the environment please do not print this e-mail unless necessary. NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18 4EX, United Kingdom. A company registered in England and Wales. Registered no. 3080780. VAT no. GB 603 8808 40-00 **************************************************************************************
_______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
