Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("America/New_York"));
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
df.
DateFormat.parse()
is NOT a query (something that returns a value and doesn't change the state of the system). It is a command which has the side-effect of updating an internal Calendar
object. After calling parse()
you have to access the timezone either by accessing the DateFormat
's Calendar
or calling DateFormat.getTimeZone()
. Unless you want to throw away the original timezone and use local time, do not use the returned Date
value from parse()
. Instead use the calendar object after parsing. And the same is true for the format method. If you are going to format a date, pass the calendar with the timezone info into the DateFormat
object before calling format()
. Here is how you can convert one format to another format preserving the original timezone:
DateFormat originalDateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy");
DateFormat targetDateFormat = new SimpleDateFormat("EEE., MMM. dd, yyyy");
originalDateFormat.parse(origDateString);
targetDateFormat.setCalendar(originalDateFormat.getCalendar());
return targetDateFormat.format(targetDateFormat.getCalendar().getTime());
It's messy but necessary since parse()
doesn't return a value that preserves timezone and format()
doesn't accept a value that defines a timezone (the Date
class).