将UTC时间戳转换为本地时间戳

时间:2019-03-25 07:36:27

标签: android

我想从UTC毫秒获取本地时间(以毫秒为单位)...我尝试了以下代码。但是它返回的是UTC时间而不是本地时间。

private long getLocalTimeFromUTC(long aLong) {
    TimeZone timeZone = TimeZone.getTimeZone("UTC");
    Calendar calendar = Calendar.getInstance(timeZone);
    calendar.setTimeInMillis(aLong);
    Calendar calendar1 = Calendar.getInstance(TimeZone.getDefault());
    calendar1.setTimeInMillis(calendar.getTimeInMillis());
    return calendar1.getTimeInMillis();
}

实际上我不需要DateFormat字符串,我需要毫秒返回...这就是为什么我使用Calendar实例的原因。

1 个答案:

答案 0 :(得分:0)

您编写的代码在两个不同的时区中创建了两个具有相同时间戳的日历,因此,getTimeInMillis的值当然是相同的。日期由三个部分组成-时区,自纪元以来的毫秒数和日期字段-当您设置其中两个时,第三个部分是从它们派生的。因此,除了时区之外,您还需要设置日期字段,以便可以导出毫秒值。

private long getLocalTimeFromUTC(long aLong) {
    TimeZone timeZone = TimeZone.getTimeZone("UTC");
    Calendar calendar = Calendar.getInstance(timeZone);
    calendar.setTimeInMillis(System.currentTimeMillis());

    Calendar calendar1 = Calendar.getInstance(TimeZone.getDefault());
    // 7 date fields: YEAR, MONTH, DAY_OF_MONTH, 
    // HOUR_OF_DAY, MINUTE, SECOND, and MILLISECOND
    // they come from "import static java.util.Calendar.*;"
    calendar1.set(calendar.get(YEAR), 
                  calendar.get(MONTH),
                  calendar.get(DAY_OF_MONTH),
                  calendar.get(HOUR_OF_DAY),
                  calendar.get(MINUTE),
                  calendar.get(SECOND));
    calendar1.set(MILLISECOND, calendar.get(MILLISECOND));
    return calendar1.getTimeInMillis();
}