[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
Thu Jan 31 04:33:18 EST 2013
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
>
More information about the rules-users
mailing list