【问题标题】:How to calculate the time difference between two events in Java?如何计算Java中两个事件之间的时间差?
【发布时间】:2010-12-25 23:51:52
【问题描述】:

我想计算两个时间点之间的时间差(以秒为单位)。例如,在程序执行期间,我设置了一个变量的值,一段时间后我再次更改它。最近的值变化与之前的值之间的时间差是多少?

【问题讨论】:

标签: java datetime


【解决方案1】:

您可以使用System.currentTimeMillis() 以一毫秒的分辨率保存当前时间。 只需在第一个事件发生时节省时间(最好使用长变量来保存该值) 当第二个事件发生时再次发生。差除以 1000 将得出以秒为单位的时差。

【讨论】:

    【解决方案2】:

    你可以做这样简单的事情:

    long begin = System.currentTimeMillis();
    doWork();
    long end = System.currentTimeMillis();
    
    long dt = end - begin;
    

    更成熟的方式(特别是,如果您需要在很多地方多次执行此操作)是使用库。看perf4j。您可以在方法上添加@Profiled 注解,它会自动生成一些统计信息并将其写入日志文件。

    【讨论】:

      【解决方案3】:

      存储从System.nanoTime() 检索到的当前时间,并减去这些值中的任意两个以获得以纳秒为单位的差异。

      (通过整数除以一百万,然后浮点数一千,您会得到一个以秒为单位的时间,小数点后三位,打印效果很好。)

      【讨论】:

      • 你可以只除以十亿,而不是除以一百万然后一千。
      • @Peter,要么给出九位小数,要么没有。我喜欢三个。
      • 你应该使用双精度而不是浮点数。我错过了您试图将秒数精确到小数点后三位。我做了类似的事情,除了我更喜欢六位小数。 ;)
      • @Peters,我不是母语人士,所以请让我知道如何改写它,以便很清楚这就是目的。另外,出于好奇,您有多少次以毫秒为单位测量的时差不适合浮点数?
      【解决方案4】:

      只需从系统中获取它并存储在长数据中。您可以对这些 long 进行数学运算以计算出时差。

      long start = System.currentTimeMillis();
      
      //do stuff
      //do more stuff
      
      long end = System.currentTimeMillis();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-17
        • 2018-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多