如何在 android 中获得准确的 UTC 时间戳

How get accurate UTC timestamp in android

我不知道哪个适合获取UTC时间

我的密码是

System.currentTimeMillis()

对于 java android

国际化结果正确吗?

也许用户可以更改设备时间和结果不同? (对 UTC 有影响吗?)

在Linux平台上,系统时钟应设置为UTC。它是否真实,是否准确,最终取决于用户。

调用 System.currentTimeMillis() 将给出自 1970-01-01T00:00:00Z 以来的 UTC 时间。

Is the result correct for international?

是的。前提是时钟与合适的网络时间源同步并且用户没有弄乱它。

Maybe user can change device time and result be different?

是的,他们可以。您对此无能为力。

您可以尝试连接到网络时间服务器,但用户可能会阻止它,或者导致您的游戏连接到虚假的时间服务器。如果他们“拥有”您的游戏运行的平台,您可能无法获得有保证的可靠时间。

NTP talks about man-in-the-middle attacks. Unfortunately, standard NTP doesn't have a way to deal with that. There is a draft RFC 上关于网络时间安全的维基百科页面,但他们自 2015 年以来一直致力于此,在撰写本文时仍未完成。)

对于获取正确的 "local" 或 "international" 时间存在一种常见的误解。时间本身并不知道这些概念,我会在这里尝试解释一下,因为其他人还在搜索它。

注意以下假设机器时钟计时准确,开机时初始时间设置也正确。另请注意,大多数连接的设备会不时将此内部时钟与网络源同步,以使其 运行 准确。

时间本身是我们无法控制的,它一瞬间流逝。但是时间 presentation(秒、小时、天、年、十年)是人类创造的概念,只是为了更清楚地了解时间的流逝。你可以想象如果我们在片刻中讨论时间会有多么混乱 - "Hey, I'm going to the store in 901400203150 moments, would you like to join?".

反正时区也是一样,是人为的概念。我们生活在地球上,靠近太阳和月亮,space 中发生了一些旋转,使我们认识到较长的时间段称为 "year" 和较短的时间段称为 "month"。我们还认识到,早晨在某些地方来得早,而在其他地方来得晚 - 因此,我们引入了时间计算和时区,让地球上的每个人都能更轻松地跟踪时间。但是在一万年前,没有人知道时区,但时间却在流逝。

因此,考虑到这一点来回答最初的问题:是的,如果您有兴趣获得绝对当前[,该方法将起作用 =35=]次。

如前所述,没有"international"或"local"时间,每个人的时间都是一样的。我们在提及转换为并以特定时区格式呈现的时间值时使用这些术语。今天我们有一个叫做 Epoch 的东西(对于人类:00:00:00 UTC on 1 January 1970,对于大多数机器:0)——所以获取 "milliseconds since Epoch" 会给你 raw 时间,表示 以毫秒为单位,从大纪元开始过去。

时间本身并不知道时区或年份或月份,这是一个你必须自己转换成的人类构造。基本上,你从OS得到的是原始时间,然后你把它转换成你想要的时区,想要的格式和语言,让用户更容易读。以及如何转换时间 - 这是一个完全不同的问题。 :)