javadateparsingsimpledateformatdate-conversion

How to parse a Date for different timezone?


I am trying to convert to String a DateTime value, which is present in a flat file as a Date object, after parsing the flat file in my code.

I have written the code to do that, but when I format the date it's always giving me a date, which is 1 day more than the specified value, some times it's adding 5:30.

Below is the code for that:

    DateFormat f = new SimpleDateFormat("EEE MMM dd HH:mm:ss zz yyyy");
    Date date = f.parse("Tue Aug 23 20:00:03 PDT 2011");
    System.out.println("---date----" + date);

The output for the above is

    ---date----Wed Aug 24 08:30:03 IST 2011  

Can you, please, let me know what's the issue here? Is there a problem in the pattern that I am using in the SimplaDateFormat class or is there a problem with the code?


Solution

  • Your system timezone is different. The output is showing IST - or Indian Standard Time, which is an 12.5h difference from PDT. The code is properly parsing the given date which is PDT (UTC -7) and printing out IST (UTC +5h30).

    Java stores Dates as UTC dates. So when you parse the PDT date, Java will convert it to UTC and store it internally as a UTC timestamp. When you print, if you do not specify the timezone, it will default to the system timezone, which in your case would appear to be IST.

    To specify an exact timezone, specify it in the SimpleDateFormat:

    DateFormat f = new SimpleDateFormat("EEE MMM dd HH:mm:ss zz yyyy");
    f.setTimeZone(TimeZone.getTimeZone("PDT"));
    Date date = f.parse("Tue Aug 23 20:00:03 PDT 2011");
    System.out.println("---date----" + f.format(date));