我正在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 :(得分:2)
如果您想要经过时钟时间,那么使用内部过程system_clock会更简单,因为它提供单个时间值输出。 (还有其他参数提供有关过程的信息,这就是为什么它是一个过程而不是一个函数。)例如,参见http://gcc.gnu.org/onlinedocs/gfortran/SYSTEM_005fCLOCK.html。如果要计算CPU使用率,请使用cpu_time。对于任何一个,在程序的开始和结束时的两个调用,然后是一个简单的区别。您可以使用COUNT_RATE参数将整数计数转换为秒。
答案 1 :(得分:0)
您可以减去数字,然后将所有内容转换为毫秒,并总结ms,ms(毫秒),分钟(毫秒),小时(毫秒),......
在你的情况下,这将是
0 + 0 + 0 + 0 + 0 + 1*1000 + 384 = 1384 [ms]
这种方法也适用于溢出,因为如果它们全部转换为相同的基础,则左侧更多列中的正数会超过负数。例如。 0:58.000
到1:02.200
会产生
1 * 60000 + (-56) * 1000 + 200 = 4200
请注意,由于它们没有共同的长度,因此最多可以使用数天而不是几个月。
答案 2 :(得分:0)
您可以在几秒或几毫秒内计算某些开始时间(1970年1月1日,UNIX)的偏移量。这些数字的差异是您的经过时间。
(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) +
( ... )