Re: capturing timezone when parsing java.util.Date
Robert Dodier wrote:
When a string like "2009-06-26 14:13:00-0400" is parsed to
a java.util.Date via java.text.SimpleDateFormat, the timezone
in the string is lost --- the timezone of the result isn't UTC-04:00,
instead it's the default timezone (or date formatter's timezone,
if it was assigned a non-default value).
The result is a timezone independent real time.
I could pull off the trailing timezone from the string and parse
it separately and adjust the timezone of the date by hand,
but I can't see a way to do that.
You decide timezone when you output the time.
Any advice about how to capture the timezone when parsing
a date would be appreciated.
Try and look at the following:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class DateParseFormat {
private static DateFormat dfoffset;
private static DateFormat dfminus4;
private static DateFormat dfplus2;
private static void test(String s) throws ParseException {
System.out.println("Time string: " + s);
Date d = dfoffset.parse(s);
System.out.println("Binary time when parsed: " + d.getTime());
System.out.println("Formatted in -4: " + dfminus4.format(d));
System.out.println("Formatted in +2: " + dfplus2.format(d));
}
public static void main(String[] args) throws ParseException {
dfoffset = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssz");
dfminus4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dfminus4.setTimeZone(TimeZone.getTimeZone("GMT-04:00"));
dfplus2= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dfplus2.setTimeZone(TimeZone.getTimeZone("GMT+02:00"));
test("2009-06-26 14:13:00-0400");
test("2009-06-26 14:13:00+0200");
}
}
It outputs:
Time string: 2009-06-26 14:13:00-0400
Binary time when parsed: 1246039980000
Formatted in -4: 2009-06-26 14:13:00
Formatted in +2: 2009-06-26 20:13:00
Time string: 2009-06-26 14:13:00+0200
Binary time when parsed: 1246018380000
Formatted in -4: 2009-06-26 08:13:00
Formatted in +2: 2009-06-26 14:13:00
Note that:
* parse does use the time zone information
* Date is basically a binary real time independent of timezones
* you decide timezone when formatting for output
Also, if someone wants to
recommend a different time/date library, I would be interested.
Java's built-in time/date functions are a colossal disaster,
but I digress.
It is currently in second edition. Third edition is said to be
on its way. Someone agrees with you.
But I don't think you example is among the problems.
Arne