当前位置: 首页 > 知识库问答 >
问题:

System.currentTimeMillis()是否返回UTC时间?

逑景铄
2023-03-14

我想以毫秒为单位获取当前的UTC时间。我搜索了一下google,得到了System.currentTimeMillis()确实返回UTC时间的一些答案。但事实并非如此。如果我做了以下事情:

long t1 = System.currentTimeMillis();
long t2 = new Date().getTime();
long t3 = Calendar.getInstance().getTimeInMillis();

所有三个时间几乎相同(由于通话时间不同,时间相差毫秒)。

t1 = 1372060916
t2 = 1372060917
t3 = 1372060918

这个时间不是UTC时间,而是我的时区时间。如何在android中获取当前UTC时间?

共有2个答案

陈宏胜
2023-03-14

我可以确认所有三个调用都可能取决于本地时间,考虑到纪元,而不是 Date.toString() 或任何类似的方法。我已经看到它们依赖于运行Android 2.3的特定设备的本地时间。我还没有用其他设备和Android版本测试过它们。在这种情况下,本地时间是手动设置的。

获取独立UTC时间的唯一可靠方法是使用GPS_PROVIDER请求位置更新。从NETWORK_PROVIDER检索的位置的getTime()值也取决于本地时间。另一个选项是ping返回UTC时间戳的服务器。

所以,我所做的是以下几点:

public static String getUTCstring(Location location) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    String date = sdf.format(new Date(location.getTime()));
    // Append the string "UTC" to the date
    if(!date.contains("UTC")) {
        date += " UTC";
    }
    return date;
}
扶誉
2023-03-14

您显示的所有三行都将给出自unix历元以来的毫秒数,这是一个固定的时间点,不受本地时区的影响。

你说“这个时间不是UTC时间”——我怀疑你实际上诊断错了。我建议为此使用 epochconverter.com。例如,在您的示例中:

1372060916 = Mon, 24 Jun 2013 08:01:56 GMT

我们不知道您是何时生成该值的,但除非实际上是在世界协调时上午8:01,否则这是您的系统时钟有问题。

都不是<code>系统。currentTimeMillis或Date内的值本身都不受时区影响。但是,您应该注意Date。toString()确实使用了本地时区,这误导了许多开发人员,使他们认为Date与时区有着内在的联系——它不是,它只是一个瞬间,没有关联的时区甚至日历系统。

 类似资料:
  • 问题内容: 我想以毫秒为单位获取当前UTC时间。我搜索了google,并得到了一些System.currentTimeMillis()确实返回UTC时间的答案。但事实并非如此。如果我执行以下操作: 这三个时间几乎都相同(由于通话,相差以毫秒为单位)。 这不是UTC时间,而是我的时区时间。如何在Android中获取当前UTC时间? 问题答案: 您显示的所有三行都将给出自unix纪元以来的毫秒数,这是

  • 问题内容: 我只想检查是否返回UTC / GMT时间戳,还是需要使用? 问题答案: 返回UNIX时间戳,该时间戳与时区无关。由于UNIX时间戳表示自1970年 UTC 以来的秒数,您可以说它是UTC,但实际上没有时区。 实际上,UNIX时间戳在任何给定时间在全世界范围内都是相同的值。在撰写本文时,它在东京,伦敦和纽约。要将其转换为“人类可读”的时间,您需要指定要显示的时区。在东京是,在伦敦是在纽约

  • Python时间模块中的是否返回系统的时间或UTC时间?

  • 问题内容: 我真的对方法调用的结果感到困惑,因为它返回了IST时间。 这是我使用的代码 我得到的答复是: 所以我尝试将默认的TimeZone更改为UTC,然后检查了一下,然后工作正常 结果: 我在这里想念什么吗? 问题答案: 该调用返回的。正是它将转换为的字符串,并且这种转换将使用您所用的默认时区。 您需要明确使用来在所需的时区中打印。 编辑:@Laurynas的礼貌,请考虑以下事项:

  • 问题内容: https://docs.oracle.com/javase/6/docs/api/java/lang/System.html#currentTimeMillis()说: 返回当前时间(以毫秒为单位)。请注意,虽然返回值的时间单位是毫秒,但该值的粒度取决于基础操作系统,并且可能更大。例如,许多操作系统以几十毫秒为单位测量时间。 我不确定我是否可以保证此代码将始终打印出不断增加(或相同)

  • 我从Ruby on Rails webservice以Unix时间戳格式获取当前时间(即1970年1月1日起的秒),服务器上的时区是UTC。 在Java中,我试图将本地当前时间转换为UTC时间。但每次都是提前6分钟。我想得到UTC当前时间和服务返回时间的差值。我的Java代码是- 其中服务器时间是我从网络服务获得的时间。resTime 的值显示负值,约为 6 分钟。 所以我的问题是为什么UTC时区