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(a)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(a)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(a)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(a)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(a)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...
>> Sent from the Drools: User forum mailing list archive at
Nabble.com.
>> _______________________________________________
>> rules-users mailing list
>> rules-users(a)lists.jboss.org
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>
> _______________________________________________
> rules-dev mailing list
> rules-dev(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-dev
_______________________________________________
rules-dev mailing list
rules-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-dev