【问题标题】:new Date().getTime() not returning timestamp in millisecondsnew Date().getTime() 不以毫秒为单位返回时间戳
【发布时间】:2012-10-05 08:25:52
【问题描述】:

我有一个类,它使用 java.util.Date 类创建日期对象并使用 getTime() 获取当前毫秒数。

我在 Java 文档中看到 getTime() 返回毫秒数,我的机器上也是如此。

我有另一台服务器,当我在服务器上部署我的应用程序时,相同的getTime() 返回以秒为单位的时间戳。

例如

  • 服务器上的值:1350054625
  • 本地值:1350054625000

我想知道这怎么可能,我在本地尝试了相同的代码,又得到了以毫秒为单位的时间戳。

下面是部分代码...

String longTime = new Long((new Date().getTime())).toString();
if(log.isDebugEnabled())log.debug("LAST_FEED_TIME will be " + longTime + " stored.");

【问题讨论】:

  • 你是如何从服务器获取价值的?
  • 日期是您从System.currentTimeMillis(); 获得的值的包装器,您可以尝试使用它吗?
  • 发布您用来显示价值的确切代码
  • 试试String longTime = String.valueOf(System.currentTimeMillis());
  • 如果您肯定用我发布的代码替换会改变服务器上的行为,那么我能看到的唯一选择是您在服务器上使用了一个损坏的 java.util.Date 实现。这归结为服务器端 JRE,或者理论上但不太可能是类路径上的另一个 JAR(我应该说是恶意的吗?)定义了一个损坏的 java.util.Date

标签: java unix-timestamp java.util.date gettime


【解决方案1】:

'new Date()' 依次使用 System.currentTimeMillis()

System.currentTimeMillis

以毫秒为单位返回当前时间。请注意,虽然单位 返回值的时间为毫秒,粒度为 value 取决于底层操作系统,可能更大。 例如,许多操作系统以几十为单位测量时间 毫秒。

查看类 Date 的描述来讨论轻微的 “计算机时间”和协调之间可能出现的差异 世界标准时间 (UTC)。

来源:http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/System.html#currentTimeMillis()

【讨论】:

  • 这并不能完全解释为什么相同的代码在不同的机器上运行时会返回不同的结果,是吗?
  • 是的,这不能回答问题。但我认为这些信息将有助于发现问题。例如:“一些操作系统以几十毫秒为单位测量时间。”服务器中每个操作系统的时间测量单位可以是秒。
  • 是的——但是 Java 应该以相同的格式返回它,但毫秒设置为“0”。我明白你为什么放置这些信息,我只是想看看我是否遗漏了什么:)
  • 我已将代码更改为 System.currentTimeMillis() 并且我的问题已解决,但我仍在寻找这种情况的解决方案,或者 api 以这种方式运行的确切原因......
猜你喜欢
  • 2011-08-02
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多