Android 从 GMT 毫秒获取 UTC 毫秒
Posted
技术标签:
【中文标题】Android 从 GMT 毫秒获取 UTC 毫秒【英文标题】:Android get UTC milliseconds from GMT milliseconds 【发布时间】:2013-07-28 23:03:49 【问题描述】:我有一个 GMT 时间变量,我将转换为 UTC。我发布我的代码:
long mytime = 1376824500000;
Date date = new Date(mytime);
String time = new SimpleDateFormat("HH:mm").format(date);
这在某些设备中返回 "13:15"
,但我希望始终拥有 UTC 日期:"11:15"
。
我该怎么做?
【问题讨论】:
将时区设置为 GMT。顺便说一句,与大多数语言一样,Java 不支持闰秒,因此 UTC 实际上映射到 GMT。 【参考方案1】:尚不清楚您期望 UTC 和 GMT 之间有什么区别 - 就我们在这里讨论的目的而言,它们是等价的。 (它们在技术上并不完全相同,但是...)
就格式化而言,您只需要在格式化程序上设置时区即可:
// TODO: Consider setting a locale explicitly
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
format.setTimeZone(TimeZone.getTimeZone("UTC"));
String time = format.format(date);
【讨论】:
非常感谢!我没有设置时区。在某些设备中,我得到 GMT+2.00 格式的值,在其他设备中,我得到 utc 值。谢谢。 @Tenaciousd93:是的,你没有设置时区,所以你得到的是本地时区。如果您想要 UTC 时区,则需要明确说明。【参考方案2】:试试这个:
long mytime = 1376824500000;
Date date = new Date(mytime);
SimpleDateFormat formater = = new SimpleDateFormat("HH:mm");
formater .setTimeZone(TimeZone.getTimeZone("GMT"));
String time formater.format(date);
【讨论】:
【参考方案3】:java.time
java.util
日期时间 API 及其格式化 API SimpleDateFormat
已过时且容易出错。建议完全停止使用,改用modern Date-Time API*。
使用现代日期时间 API java.time
的解决方案:
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。它代表 Zulu 并指定 Etc/UTC
时区(时区偏移量为 +00:00
小时)。
从 Trail: Date Time 了解有关现代日期时间 API 的更多信息。
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7 . 如果您正在为一个 android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring 和 How to use ThreeTenABP in Android Project。
【讨论】:
以上是关于Android 从 GMT 毫秒获取 UTC 毫秒的主要内容,如果未能解决你的问题,请参考以下文章