【问题标题】:Convert UTC timestamp to local timestamp将 UTC 时间戳转换为本地时间戳
【发布时间】:2019-08-15 10:01:09
【问题描述】:

我想从 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 实例的原因。

【问题讨论】:

标签: android


【解决方案1】:

您编写的代码在两个不同的时区创建了两个具有相同时间戳的日历,因此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();
}

【讨论】:

  • 1553509009000 是我的 UTC 时间,当我使用您的答案将其转换回来时,我得到1553489209000。多出一小时。
  • 1553489209000 - 1553509009000 不是多出 1 小时,而是多出 5 个半小时,如果您住在印度,这是正确的。重新检查您的计算。
猜你喜欢
  • 2019-03-09
  • 2019-01-05
  • 2013-03-23
  • 2015-04-20
  • 2011-02-06
  • 2018-09-17
  • 1970-01-01
  • 2013-09-12
  • 1970-01-01
相关资源
最近更新 更多