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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (941)

我有一个时间戳,它在UTC中,我想将它转换成本地时间,而不使用API调用,例如TimeZone.getTimeZone("PST")...。该怎么做?我一直在使用以下代码,但没有成功:

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));
用户回答回答于

使用Java日期和时间API,这很简单:

    String inputValue = "2012-08-15T22:56:02.038Z";
    Instant timestamp = Instant.parse(inputValue);
    ZonedDateTime losAngelesTime = timestamp.atZone(ZoneId.of("America/Los_Angeles"));
    System.out.println(losAngelesTime);

扫码关注云+社区

领取腾讯云代金券