【问题标题】:Calculating duration when you have hours, minutes, seconds, and milliseconds当你有小时、分钟、秒和毫秒时计算持续时间
【发布时间】:2011-06-11 14:17:59
【问题描述】:

我正在用 Fortran 编写一个程序,我需要一种将程序持续时间计算到毫秒的方法。我一直在使用函数“date_and_time”,它给我留下了一个包含系统时间的数组,以小时、分钟、秒和毫秒为单位。

我相信我可以在程序开始时调用该函数来存储当前时间,然后在程序结束时再次调用该函数来存储最新时间。但在那之后,我将如何计算持续时间?我试着只是减去这些值,但是一秒过去后毫秒重置,就像一分钟过去后重置秒一样。解决这个问题的最佳方法是什么?

这是程序:

       PROGRAM TEST_TIME_AND_DATE
          INTEGER I
          REAL J
          INTEGER TIME_A(8), TIME_B(8)
          CALL DATE_AND_TIME(VALUES=TIME_A)
          PRINT '(8I5))', TIME_A
          DO I = 0, 400000000
            J = I * I - J
          END DO
          CALL DATE_AND_TIME(VALUES=TIME_B)
          print '(8I5))', TIME_B
      END PROGRAM TEST_TIME_AND_DATE

结果如下:

2011    6   11 -300    9   14   49  304
2011    6   11 -300    9   14   50  688

我不知道在这里做什么,谢谢。

【问题讨论】:

    标签: datetime math timer fortran milliseconds


    【解决方案1】:

    如果您想要经过的时钟时间,使用内部过程 system_clock 会更简单,因为它提供单个时间值输出。 (有额外的参数来提供关于过程的信息,这就是为什么它是一个过程而不是一个函数。)例如,参见http://gcc.gnu.org/onlinedocs/gfortran/SYSTEM_005fCLOCK.html。如果要计时 CPU 使用率,请使用 cpu_time。对于任何一个,两个调用,在程序的开始和结束,然后是一个简单的区别。您可以使用 COUNT_RATE 参数将整数时间转换为秒。

    【讨论】:

      【解决方案2】:

      您可以减去数字,然后将所有内容转换为毫秒,然后将 ms、sec 中的 ms、min 中的 ms、hrs 中的 ms 相加,...

      在你的情况下,这将是

      0 + 0 + 0 + 0 + 0 + 1*1000 + 384 = 1384 [ms]
      

      这种方法也适用于溢出,因为如果左侧列中的正数都转换为相同的基数,则它们的权重会超过负数。例如。 0:58.0001:02.200 产生

      1 * 60000 + (-56) * 1000 + 200 = 4200
      

      请注意,这确实适用于数天,但不适用于数月,因为它们没有共同的长度。

      【讨论】:

      • 如果这两个数字越界,我不确定这是否可行。如果您的开始日期为 12/30,结束日期为 1/2,则减去月份将得到 -11,减去天数将得到 -28。
      • @eaolson 添加了关于它的注释。
      • 谢谢,这正是我需要的!
      【解决方案3】:

      您可以以秒或毫秒为单位计算从某个开始时间(UNIX 为 1970 年 1 月 1 日)开始的偏移量。这些数字的差异是您经过的时间。

      (2011 - 1970) * (number of seconds in a year) +
      (month of the year - 1) * (number of seconds in a month) +
      (day of the month - 1) * (number of seconds in a day) + 
      ( ... )
      

      【讨论】:

        猜你喜欢
        • 2020-01-03
        • 2012-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-11
        • 1970-01-01
        • 2013-01-12
        相关资源
        最近更新 更多