简体   繁体   中英

Parse a String to Date in Java

I'm trying to parse a string to a date, this is what I have:

SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss zZ (zzzz)");
Date date = new Date();
try {
    date = sdf.parse(time);
} catch (ParseException e) {
    e.printStackTrace();
}

the string to parse is this:

Sun Jul 15 2012 12:22:00 GMT+0300 (FLE Daylight Time)

I followed the http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

Pretty sure I've done everything by the book. But it is giving me ParseException .

java.text.ParseException: Unparseable date: 
"Sun Jul 15 2012 12:22:00 GMT+0300 (FLE Daylight Time)"

What am I doing wrong? Patterns I Have tried:

EEE MMM dd yyyy HH:mm:ss zzz
EEE MMM dd yyyy HH:mm:ss zZ (zzzz)

You seem to be mixing the patterns for z and Z . If you ignore the (FLE Daylight Time) , since this is the same info as in GMT+0300 , the problem becomes that SimpleDateFormat wants either GMT +0300 or GMT+03:00 . The last variant can be parsed like this:

String time = "Sun Jul 15 2012 12:22:00 GMT+03:00 (FLE Daylight Time)";
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss zzz");
Date date = sdf.parse(time);

[EDIT]
In light of the other posts about their time strings working, this is probably because your time string contains conflicting information or mixed formats.

Try it this way..

System.out.println(new SimpleDateFormat(
                "EEE MMM dd yyyy HH:mm:ss zZ (zzzz)").format(new Date()));

Output i got:

Thu Jul 12 2012 12:41:35 IST+0530 (India Standard Time)

You can try to print the date format string :

/**
 * @param args
 */
public static void main(String[] args) {
    SimpleDateFormat sdf = new SimpleDateFormat(
            "EEE MMM dd yyyy HH:mm:ss zZ (zzzz)");
    Date date = new Date();
    try {
        //
        System.out.println(sdf.format(date));
        date = sdf.parse(time);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

If you have problems with locales, you can either set the default Locale for the whole application

Locale.setDefault(Locale.ENGLISH);

or just use the english locale on your SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss zZ (zzzz)", Locale.ENGLISH);

You can also use Locale.US or Locale.UK .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM