Just let me say that my hack permits me to use "1-Feb-2013" "1-Feb-2013 15:50" "2013-02-01" "2013-02-01 3:50pm"
in the same DRL, without any decorations. (Why should I, user, bear the burden of telling the computer that "01-feb-2013" is in the format DD-MON-YYYY? The darned thing should be able to see that - any 8 year old can.) -W On 01/02/2013, Mark Proctor <mproc...@codehaus.org> wrote: > I started to look at the integration points necessary for different date > formats. The backend implementation is not really the problem, but how to do > it at a language level is - so while the backend exists, the front end does > not. > > We are looking at extending the inline casting for unit support, which would > then introduce different date formats. So it would look something like > below. > "01-feb-2013"#DD-MON-YYYY > > We will probably allow aliasing > "01-feb-2013"#df1 > > But I don't think this will be done soon. > > Mark > > On 1 Feb 2013, at 13:39, Wolfgang Laun <wolfgang.l...@gmail.com> wrote: > >> OP's problem statement is indeed valid. Given the wide range of >> possible date formats, a generic solution that tolerates the omission >> of times so that a single format might be used for both, date+time and >> date alone, isn't feasible. >> >> org.drools.core.util.DateUtils contains traces of an idea to have >> multiple formats, but this doesn't seem to be supported (or is >> absolutely undocumented). >> >> I guess my hack (see code below) is an improvement over the current >> state. >> >> -W >> >> >> ---------- Forwarded message ---------- >> From: Wolfgang Laun <wolfgang.l...@gmail.com> >> Date: Thu, 31 Jan 2013 10:33:18 +0100 >> Subject: Re: [rules-users] Is it posibble to keep two date formats in >> drools like 'dd-MMM-yyyy' and 'dd-MMM-yyyy HH:mm' >> To: Rules Users List <rules-us...@lists.jboss.org> >> >> Not without a hack: replace org.drools.core.util.DateUtils by the >> modified code given below. Specify drools.dateformat as a list of date >> formats separated by a newline, e.g.: >> >> System.setProperty( "drools.dateformat", "dd-MMM-yyyy HH:mm\ndd-MMM-yyyy" >> ); >> >> Make sure that a more comprehensive format is first, they are tried in >> the given order, and a longer String is accepted for a shorter format. >> The very first format is used for printing (whenever Drools feels like >> doing so). On error, you may see a message such as >> >> Invalid date input format: [1-5-1985] it should follow one of: >> [dd-MMM-yyyy HH:mm] or [dd-MMM-yyyy] >> >> And the default format is dd-MMM-yyyy - NOT dd-mmm-yyyy as "Expert" >> would have it. >> >> -W >> >> package org.drools.core.util; >> >> import java.text.DateFormat; >> import java.text.DateFormatSymbols; >> import java.text.ParseException; >> import java.text.SimpleDateFormat; >> import java.util.Date; >> import java.util.Locale; >> >> import org.drools.type.DateFormats; >> >> public class DateUtils { >> >> private static final long serialVersionUID = 510l; >> private static final String DEFAULT_FORMAT_MASK = "dd-MMM-yyyy"; >> private static final String DATE_FORMAT_MASK = getDateFormatMask(); >> private static final String DEFAULT_COUNTRY = Locale.getDefault() >> .getCountry(); >> private static final String DEFINE_COUNTRY = getDefaultContry(); >> private static final String DEFAULT_LANGUAGE = Locale.getDefault() >> .getLanguage(); >> private static final String DEFINE_LANGUAGE = getDefaultLanguage(); >> >> private static ThreadLocal<SimpleDateFormat[]> df = new >> ThreadLocal<SimpleDateFormat[]>() { >> protected SimpleDateFormat[] initialValue() { >> DateFormatSymbols dateSymbol = new DateFormatSymbols(new >> Locale( >> DEFINE_LANGUAGE, DEFINE_COUNTRY)); >> String[] masks = getDateFormatMask().split( "\\n" ); >> SimpleDateFormat[] dateFormats = new >> SimpleDateFormat[masks.length]; >> for( int i = 0; i < masks.length; i++ ){ >> dateFormats[i] = new SimpleDateFormat(masks[i], dateSymbol); >> } >> return dateFormats; >> }; >> }; >> >> private static String getDefaultLanguage() { >> String fmt = System.getProperty("drools.defaultlanguage"); >> if (fmt == null) { >> fmt = DEFAULT_LANGUAGE; >> } >> return fmt; >> } >> >> private static String getDefaultContry() { >> String fmt = System.getProperty("drools.defaultcountry"); >> if (fmt == null) { >> fmt = DEFAULT_COUNTRY; >> } >> return fmt; >> } >> >> /** Use the simple date formatter to read the date from a string */ >> public static Date parseDate(final String input, DateFormats >> dateFormats) { >> for( SimpleDateFormat dateFormat: df.get() ){ >> try { >> Date date = dateFormat.parse( input ); >> return date; >> } catch (final ParseException e) { >> } >> } >> String valids = DATE_FORMAT_MASK.replace( "\n", "] or [" ); >> throw new IllegalArgumentException("Invalid date input format: [" >> + input + "] it should follow one of: [" + valids + >> "]"); >> } >> >> /** Use the simple date formatter to convert the Date into a String */ >> public static String format(final Date input) { >> return df.get()[0].format( input ); >> } >> >> /** Converts the right hand side date as appropriate */ >> public static Date getRightDate(final Object object2, DateFormats >> dateFormats) { >> if (object2 == null) { >> return null; >> } >> if (object2 instanceof String) { >> return parseDate((String) object2, dateFormats); >> } else if (object2 instanceof Date) { >> return (Date) object2; >> } else { >> throw new IllegalArgumentException("Unable to convert " >> + object2.getClass() + " to a Date."); >> } >> } >> >> /** Check for the system property override, if it exists */ >> public static String getDateFormatMask() { >> String fmt = System.getProperty("drools.dateformat"); >> if (fmt == null) { >> fmt = DEFAULT_FORMAT_MASK; >> } >> return fmt; >> } >> } >> >> >> On 31/01/2013, richie <haoruiq...@gmail.com> wrote: >>> Hi, >>> >>> The default date format in drools is 'dd-MMM-yyyy', but in the >>> definition >>> of >>> rule attribute date-effective, it says it contain a date and time >>> definition, so if I set date-effective to "30-Jan-2013 08:00", then the >>> time >>> set in date-effective will be ignored, so I changed the date format to >>> 'dd-MMM-yyyy HH:mm', now the effective date works correctly, but then we >>> got >>> problem here, if user input a date like "30-Jan-2013" the drools will >>> failed >>> to execute, so must force user to input a date like this "30-Jan-2013 >>> 00:00", this is not user friendly and the string "00:00" is meaningless. >>> >>> What I want to know is, if it's possible to keep this two formats both? >>> >>> Thanks. >>> >>> >>> >>> -- >>> View this message in context: >>> http://drools.46999.n3.nabble.com/Is-it-posibble-to-keep-two-date-formats-in-drools-like-dd-MMM-yyyy-and-dd-MMM-yyyy-HH-mm-tp4021981.html >>> Sent from the Drools: User forum mailing list archive at Nabble.com. >>> _______________________________________________ >>> rules-users mailing list >>> rules-us...@lists.jboss.org >>> https://lists.jboss.org/mailman/listinfo/rules-users >>> >> _______________________________________________ >> rules-dev mailing list >> rules-dev@lists.jboss.org >> https://lists.jboss.org/mailman/listinfo/rules-dev > > > _______________________________________________ > rules-dev mailing list > rules-dev@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-dev > _______________________________________________ rules-dev mailing list rules-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-dev