[rules-dev] [rules-users] Is it posibble to keep two date formats in drools like 'dd-MMM-yyyy' and 'dd-MMM-yyyy HH:mm'
Wolfgang Laun
wolfgang.laun at gmail.com
Fri Feb 1 09:46:22 EST 2013
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 <mproctor at 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.laun at 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.laun at 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-users at 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 <haoruiqian at 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-users at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>> _______________________________________________
>> rules-dev mailing list
>> rules-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-dev
>
>
> _______________________________________________
> rules-dev mailing list
> rules-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-dev
>
More information about the rules-dev
mailing list