本文介绍了Java:如何将 UTC 时间戳转换为本地时间?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 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 时间戳转换为本地时间?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-27 23:18