I have a timestamp that's in UTC and I want to convert it to local time without using an API call like TimeZone.getTimeZone("PST")
. How exactly are you supposed to do this? I've been using the following code without much success:
private static final SimpleDateFormat mSegmentStartTimeFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
Calendar calendar = Calendar.getInstance();
try {
calendar.setTime(mSegmentStartTimeFormatter.parse(startTime));
}
catch (ParseException e) {
e.printStackTrace();
}
return calendar.getTimeInMillis();
Sample input value: [2012-08-15T22:56:02.038Z]
should return the equivalent of [2012-08-15T15:56:02.038Z]
Date
has no timezone and internally stores in UTC. Only when a date is formatted is the timezone correction applies. When using aDateFormat
, it defaults to the timezone of the JVM it's running in. UsesetTimeZone
to change it as necessary.This prints
2012-08-15T15:56:02.038
Note that I left out the
'Z'
in the PST format as it indicates UTC. If you just went withZ
then the output would be2012-08-15T15:56:02.038-0700
Use the modern Java date & time API, and this is straightforward:
This prints
Points to note:
Z
in your timestamp means UTC, also known as Zulu time. So in your local time value, theZ
should not be there. Rather you would want a return value like for example2012-08-15T15:56:02.038-07:00
, since the offset is now -7 hours rather than Z.Instant
objects. Convert toZonedDateTime
only when you have a need, like for presentation.Question: Can I use the modern API with my Java version?
If using at least Java 6, you can.
Here is a Simple Modified solution