Date
has no timezone and internally stores in UTC. Only when a date is formatted is the timezone correction applies. When using a DateFormat
, it defaults to the timezone of the JVM it's running in. Use setTimeZone
to change it as necessary.
DateFormat utcFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
utcFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = utcFormat.parse("2012-08-15T22:56:02.038Z");
DateFormat pstFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
pstFormat.setTimeZone(TimeZone.getTimeZone("PST"));
System.out.println(pstFormat.format(date));
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 with Z
then the output would be 2012-08-15T15:56:02.038-0700
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…