Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Generic way to parse dates in Java

Tags:

java

date

parsing

What is the best way to parse dates in Java ? Is there any built in way to parse strings such as "18 Jul 2011" , "Jul 18, 2011", "18-07-2011", "2011-07-18" without knowing the format beforehand?

like image 240
Asha Avatar asked Aug 05 '11 08:08

Asha


4 Answers

There's nothing like that in the standard API library. Natty is a library that attempts this, but you should be aware that this can only ever be a "best effort" affair, as things like 2/1/2012 are simply ambiguous: without metainformation about the format, it's impossible to decide whether it's Feburary 1st or January 2nd.

like image 141
Michael Borgwardt Avatar answered Sep 30 '22 03:09

Michael Borgwardt


Not really. BalusC wrote a brilliant post on DateUtil, that "solves" most date formats parsing.

like image 43
Buhake Sindi Avatar answered Sep 30 '22 04:09

Buhake Sindi


try DateFormat with the default Format DateFormat.MEDIUM and SHORT.

public static void main(String[] args) {
    // Make a String that has a date in it, with MEDIUM date format
    // and SHORT time format.
    String dateString = "Nov 4, 2003 8:14 PM";

    // Get the default MEDIUM/SHORT DateFormat
    DateFormat format =
        DateFormat.getDateTimeInstance(
        DateFormat.MEDIUM, DateFormat.SHORT);

    // Parse the date
    try {
        Date date = format.parse(dateString);
        System.out.println("Original string: " + dateString);
        System.out.println("Parsed date    : " +
             date.toString());
    }
    catch(ParseException pe) {
        System.out.println("ERROR: could not parse date in string \"" +
            dateString + "\"");
    }

Snipped from http://javatechniques.com/blog/dateformat-and-simpledateformat-examples/

On exception you have to decide what todo next, you can build a hierarchy of Parsing Trys. like:

SimpleDateFormat df1 = new SimpleDateFormat( "dd/MM/yyyy" );
SimpleDateFormat df2 = new SimpleDateFormat( "dd-MM-yyyy" );

df1.parse(..)
df2.parse(..)

and so on.

like image 45
Michele Avatar answered Sep 30 '22 03:09

Michele


If you are familiar with the Simpledateformat you can just add a couple of dateformatter in a list/array and do them all after another until one hits a valid date.

The problem here is: What do you do with a date such as

06-07-2011

Is it July 6th or is it June 7th?

But to answer to question: no there is not a "built in generic way"

like image 38
leifg Avatar answered Sep 30 '22 04:09

leifg