【问题标题】:Java current time different values in apiapi中的Java当前时间不同的值
【发布时间】:2017-04-12 09:47:27
【问题描述】:

我对使用 Java SE 7 和 8 API 的 DateTime 相关类有点困惑,为了显示当前时间,我正在审查获取系统当前日期时间的多种方法。

我的问题是:哪一个更准确地以毫秒为单位显示时间?

接下来是sn-p的代码,我用Java 8做review。

import java.time.Instant;
import java.util.Calendar;
import java.util.Date;

public class CurrentTimeValidationDemo {
    public static void main(String[] args) {
        Instant now = Instant.now();
        Calendar calendar=Calendar.getInstance();
        Date currDate = new Date();
        System.out.println("new Date().getTime() = "+currDate.getTime());
        System.out.println("System.currentTimeMillis() = "+System.currentTimeMillis());
        System.out.println("Instant.now().toEpochMilli() = "+now.toEpochMilli());
        System.out.println("Calendar.getInstance().getTimeInMillis() = "+calendar.getTimeInMillis());
        System.out.println("Calendar.getInstance().getTime().getTime() = "+calendar.getTime().getTime());
    }
}

【问题讨论】:

  • 定义“更准确”。非常相关的stackoverflow.com/questions/368094/… 请注意,它们不一定会打印相同的内容,Instant.now 不会考虑您机器的时区或 DST。
  • 另请参阅我的SO-post,了解 Java-9 中的增强分辨率。
  • 纳秒会有细微差别。

标签: java datetime time java-8 milliseconds


【解决方案1】:

您在示例中使用的所有函数都返回相同的值(如果在同一毫秒内启动),没有一个更准确。

其中一次没有创建任何对象,因此如果您只需要知道自 1970 年 1 月 1 日以来的当前毫秒数,请使用

System.currentTimeMillis()

如果您还需要等效的对象来存储该值或进行其他操作,请使用您需要的对象。

例如,如果您需要将此值传递给接受java.util.Date 的函数,请使用java.util.Date(等等)。

【讨论】:

  • @Tunaki 表达式 Instant.now() 最终委托给 Java-8 中的 System.currentTimeMillis()。只需研究源代码。后一个表达式也不使用 DST。表达式new Date()也可以这样说。
  • @Meno 嗯,是的,你是对的。我似乎对直接打印日期感到困惑。
  • @Tunaki 是的,-关于java.util.Date - date.toString() 可能会非常混乱。最好拿它的方法date.getTime()来看看它的真实状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 2021-07-19
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多