2011-06-11 219 views
0

我正在使用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 

我不知道该怎么办这里,谢谢。

回答

0

您可以减去的数字,那么一切都转化为毫秒,总结毫秒,秒以毫秒,分钟,MS,以毫秒小时,...

在你的情况,这将是

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

这种方法也可以很好地处理溢出问题,因为如果左侧多列中的正数都转换为相同的基数,则超出负数。例如。 0:58.0001:02.200产生

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

请注意,这并工作到天,但不伴月,因为它们不共享一个共同的长度。

+0

如果这两个数字跨越一个边界,我不确定这会工作。如果你的开始日期是12/30,结束日期是1/2,那么减去月份会给你-11,减去日期会给你-28。 – eaolson 2011-06-11 14:31:28

+0

@eaolson添加了关于它的注释。 – Howard 2011-06-11 14:37:12

+0

谢谢,这正是我需要的! – Anthony 2011-06-11 14:58:06

2

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

0

您可以以秒或毫秒为单位计算某个开始时间(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) + 
(...)