From: <pat...@us...> - 2009-10-17 00:25:42
|
Revision: 967 http://cishell.svn.sourceforge.net/cishell/?rev=967&view=rev Author: pataphil Date: 2009-10-17 00:25:32 +0000 (Sat, 17 Oct 2009) Log Message: ----------- DateUtilities.parseDate now supports month-day or day-month formatted dates, as well as an arbitrary date format string. Modified Paths: -------------- trunk/core/org.cishell.utilities/src/org/cishell/utilities/DateUtilities.java Modified: trunk/core/org.cishell.utilities/src/org/cishell/utilities/DateUtilities.java =================================================================== --- trunk/core/org.cishell.utilities/src/org/cishell/utilities/DateUtilities.java 2009-10-16 19:38:51 UTC (rev 966) +++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/DateUtilities.java 2009-10-17 00:25:32 UTC (rev 967) @@ -10,6 +10,11 @@ // TODO: Fix this class. public class DateUtilities { + public static final String MONTH_DAY_DATE_FORMAT = + "Month-Then-Day Date Format"; + public static final String DAY_MONTH_DATE_FORMAT = + "Day-Then-Month Date Format"; + public final static double AVERAGE_MILLIS_PER_MONTH = (365.24 * 24 * 60 * 60 * 1000 / 12); @@ -170,7 +175,30 @@ } //TODO: These should be sorted so the first format checked is the most likely format, etc... - private static final DateFormat[] ACCEPTED_DATE_FORMATS = { + private static final DateFormat[] MONTH_DAY_DATE_FORMATS = { + new SimpleDateFormat("MM-d-yy"), + new SimpleDateFormat("MM-d-yyyy"), + new SimpleDateFormat("MM-dd-yy"), + new SimpleDateFormat("MM-dd-yyyy"), + new SimpleDateFormat("MM/d/yy"), + new SimpleDateFormat("MM/dd/yy"), + new SimpleDateFormat("MM/d/yyyy"), + new SimpleDateFormat("MMM/dd/yyyy"), + new SimpleDateFormat("MMM-d-yy"), + new SimpleDateFormat("MMM-d-yyyy"), + new SimpleDateFormat("MMM-dd-yy"), + new SimpleDateFormat("MMM-dd-yyyy"), + new SimpleDateFormat("MMM/d/yy"), + new SimpleDateFormat("MMM/dd/yy"), + new SimpleDateFormat("MMM/d/yyyy"), + new SimpleDateFormat("MMM/dd/yyyy"), + new SimpleDateFormat("yyyy"), + DateFormat.getDateInstance(DateFormat.SHORT), + DateFormat.getDateInstance(DateFormat.MEDIUM), + DateFormat.getDateInstance(DateFormat.LONG), + }; + + private static final DateFormat[] DAY_MONTH_DATE_FORMATS = { DateFormat.getDateInstance(DateFormat.FULL), new SimpleDateFormat("d-MM-yy"), new SimpleDateFormat("d-MM-yyyy"), @@ -194,11 +222,29 @@ DateFormat.getDateInstance(DateFormat.LONG), }; - public static Date parseDate(String dateString) + public static Date parseDate(String dateString, String suggestedDateFormat) throws ParseException { - for (int ii = 0; ii < ACCEPTED_DATE_FORMATS.length; ii++) { + /*System.err.println("suggestedDateFormat: " + suggestedDateFormat); + System.err.println("MONTH_DAY_DATE_FORMAT: " + MONTH_DAY_DATE_FORMAT); + System.err.println("DAY_MONTH_DATE_FORMAT: " + DAY_MONTH_DATE_FORMAT);*/ + if (MONTH_DAY_DATE_FORMAT.equals(suggestedDateFormat)) { + return parseDate(dateString, MONTH_DAY_DATE_FORMATS); + } else if (DAY_MONTH_DATE_FORMAT.equals(suggestedDateFormat)) { + return parseDate(dateString, DAY_MONTH_DATE_FORMATS); + } else { + DateFormat[] dateFormats = new DateFormat[] { + new SimpleDateFormat(suggestedDateFormat) + }; + + return parseDate(dateString, dateFormats); + } + } + + public static Date parseDate(String dateString, DateFormat[] dateFormats) + throws ParseException { + for (int ii = 0; ii < dateFormats.length; ii++) { try { - DateFormat format = ACCEPTED_DATE_FORMATS[ii]; + DateFormat format = dateFormats[ii]; format.setLenient(false); Date date = format.parse(dateString); @@ -221,7 +267,12 @@ } public static Date interpretObjectAsDate(Object object) - throws ParseException{ + throws ParseException { + return interpretObjectAsDate(object, ""); + } + + public static Date interpretObjectAsDate(Object object, String dateFormat) + throws ParseException { final String EMPTY_DATE_MESSAGE = "An empty date was found."; String objectAsString = object.toString(); @@ -303,12 +354,12 @@ } } - return parseDate(objectAsString); + return parseDate(objectAsString, dateFormat); } // private java.util.Date parseDate(String dateString) // throws AlgorithmExecutionException { -// for (DateFormat format : ACCEPTED_DATE_FORMATS) { +// for (DateFormat format : MONTH_DAY_DATE_FORMATS) { // try { // format.setLenient(false); // java.util.Date date = format.parse(dateString); @@ -333,4 +384,15 @@ // " as a date. Aborting the algorithm."; // throw new AlgorithmExecutionException(exceptionMessage); // } + + private static Date fixDateYear(Date date) { + if (date.getYear() < 1900) { + Date fixedDate = (Date)date.clone(); + fixedDate.setYear(date.getYear() + 1900); + + return fixedDate; + } else { + return date; + } + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |