问题描述
我有一个 UTC 时间戳,我想将它转换为本地时间,而不使用像 TimeZone.getTimeZone("PST")
这样的 API 调用.你到底应该怎么做?我一直在使用以下代码,但没有取得多大成功:
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();
样本输入值:[2012-08-15T22:56:02.038Z]
应该返回相当于 [2012-08-15T15:56:02.038Z]
推荐答案
Date
没有时区,内部存储为 UTC.只有在格式化日期时才会应用时区校正.使用 DateFormat
时,它默认为其运行所在的 JVM 的时区.使用 setTimeZone
根据需要进行更改.
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));
这会打印 2012-08-15T15:56:02.038
请注意,我在 PST 格式中省略了 'Z'
,因为它表示 UTC.如果你只是使用 Z
那么输出将是 2012-08-15T15:56:02.038-0700
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
这篇关于Java:如何将 UTC 时间戳转换为本地时间?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!