Java:如何将 UTC 时间戳转换为本地时间?

标签 java api date calendar timezone

我有一个 UTC 时间戳,我想将其转换为本地时间,而不使用像 TimeZone.getTimeZone("PST") 这样的 API 调用。你到底应该怎么做?我一直在使用以下代码,但没有取得多大成功:

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 进行更改。

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

关于Java:如何将 UTC 时间戳转换为本地时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12487125/

相关文章:

java - Android 中如何设置 TextView 文本格式?

java - For 循环创建一个比预期值少 1 的数组

java - RxJava 和 RxJava 2 可以共存于同一个 Android 项目中吗?

api - 为什么 twitter 的自始至终参数不起作用?

c# - 仅在 C# 中用于 Date 的类型 - 为什么没有 Date 类型?

javascript - 折叠所有项目并仅展开其中一项

api - ember-data REST 服务器 API 应该返回什么?

api - 使用 Laravel JWT 重新验证时将旧 token 列入黑名单

java.lang.IllegalArgumentException : Comparison method violates its general contract[dup] 异常

MYSQL 根据年份和月份生成时间戳