Android从GMT毫秒获得UTC毫秒

时间:2013-07-29 08:27:22

标签: java android date utc gmt

我在GMT中有时间变量,我将转换为UTC。我发布了我的代码..

long mytime = 1376824500000;
Date date = new Date(mytime);
String time = new SimpleDateFormat("HH:mm").format(date);

在某些设备中返回"13:15",但我希望始终使用utc日期:"11:15"。 我怎样才能做到这一点? 谢谢。

3 个答案:

答案 0 :(得分:4)

目前尚不清楚您与UTC和GMT之间的期望有何不同 - 出于我们在此讨论的目的,它们是等效的。 (他们在技术上并不完全相同,但......)

格式而言,您只需在格式化程序上设置时区:

// TODO: Consider setting a locale explicitly
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
format.setTimeZone(TimeZone.getTimeZone("UTC"));
String time = format.format(date);

答案 1 :(得分:1)

试试这个:

long mytime = 1376824500000;
Date date = new Date(mytime);
SimpleDateFormat formater = = new SimpleDateFormat("HH:mm");
formater .setTimeZone(TimeZone.getTimeZone("GMT"));
String time formater.format(date);

答案 2 :(得分:0)

java.time

java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用它们并切换到 modern Date-Time API*

使用 java.time(现代日期时间 API)的解决方案:

import java.time.Instant;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.OffsetTime;
import java.time.ZoneOffset;

public class Main {
    public static void main(String[] args) {
        Instant instant = Instant.ofEpochMilli(1_376_824_500_000L);
        OffsetDateTime odtUtc = instant.atOffset(ZoneOffset.UTC);
        LocalTime time = odtUtc.toLocalTime();
        System.out.println(time);

        // If you want the time with timezone offset
        OffsetTime ot = odtUtc.toOffsetTime();
        System.out.println(ot);
    }
}

输出:

11:15
11:15Z

ONLINE DEMO

输出中的 Z 是零时区偏移的 timezone designator。它代表祖鲁语并指定 Etc/UTC 时区(时区偏移为 +00:00 小时)。

Trail: Date Time 了解有关现代 Date-Time API 的更多信息。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project