user1285928
user1285928

Reputation: 1476

Unparseable date: "30-Jun-12"

I'm using a Java method to convert the date into suitable format:

private Timestamp toTimeStamp(String s) throws java.text.ParseException
    {
        Timestamp ts = null;
        java.util.Date date = null;
        if (s == null || s.trim().isEmpty()) return ts;

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.S");
        date = (java.util.Date) sdf.parse(s);
        ts = new Timestamp(date.getTime());

        return ts;

    }

When I tried to execute the form I get this error:

Unparseable date: "30-Jun-12"

I tried to change the the date format but I still get this error. Can you help me to fix it?

Upvotes: 2

Views: 6433

Answers (3)

MagGGG
MagGGG

Reputation: 20936

If you develop web application and you run it in browser, try change preferable language settings in browser settings. Different countries have different date format, there is major difference between European Countries and United States, so try in your browser (eg. Firefox):

Tools => Options => Content => Choose preferable language 

Make sure when you make your application focused in browser that language bar on the taskbar shows desirable langage.

If web application is not case: Check regional setting and preferable language settings.

Upvotes: 0

BalusC
BalusC

Reputation: 1108632

There are 2 problems:

  1. Your date format pattern is wrong. The yyyy-MM-dd hh:mm:ss.S can never match 30-Jun-12. You need dd-MMM-yy. See also SimpleDateFormat javadoc.
  2. When parsing day/month names, make sure that you specify the right locale matching the language used in the day/month names. Your system default locale seems to be not English at all.

So this should do:

SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yy", Locale.ENGLISH);
Date date = sdf.parse("30-Jun-12");

A third problem, which is actually more a design matter, you should not be using java.sql.Timestamp (and other SQL specific date types) anywhere in your model/business layer (you originally tagged the question JSF). You should only use it in your data layer. Use java.util.Date instead and convert only at exactly the moment you need to persist it in the DB like so

preparedStatement.setTimestamp(1, new Timestamp(date.getTime()));

Upvotes: 8

Jigar Joshi
Jigar Joshi

Reputation: 240860

You are passing date in format 30-Jun-12 then you should use format

dd-MMM-yy

with SimpleDateFormat

Upvotes: 1

Related Questions