关于去时间差的问题
小弟今天想了下怎么去取当一个程序从运行开始,到用户要求停下,此时程序运行了多久的问题(不计算天数,只要求具体的秒数)?
我的想法是,先time出程序开始运行时的时间,把它move到一个变量X(先)里去.然后当用户要求停下(比如触发了某个指示器) ,再取此时的系统时间Y(后),现在要计算Y-X的具体秒数?
先用EXTRCT取出X(先)和Y(后)各自的hour,minute,以及second.
比较X(先)和Y(后)的hour,如果Y的hour小于X的hour<(X--23:59:57)、(Y--00:00:32)>,将Y的hour+24,然后减去X的hour计算出时差;现在比较Y和X的minute,如果Y的minute小于X的minute,先将时差-1,然后Y得minute+60减去X的minute计算出分差;最后比较Y的second和X的second,如果Y的
second小于X的second,将分差-1,Y的second+60减去X的second,计算出秒差,最后time_total=(时差*60+分差)*60+秒差计算出X和Y的时间差?
(当然,当X得hour、minute、second大于Y的时,可以直接想减,以为不需要计算天数.)总觉得这个方法太死了.各位大侠,有什么好方法直接取出他们的时间差啊.帮帮忙.谢谢!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
看来SUBDUR比DIFF稳定啊,不明缘由啊,谁能给个解释啊?
07.01,DIFF运行是个正数与SBUDUR时等价的。
今天运行一下,DIFF结果是个负数,SUBDUR正常。
C EVAL TEMPFIELD=%DIFF(BASEDATE:WORKDATE:*DAYS)
得到的结果竟然是负数,厉害啊!
最近在取时间的问题上发现了个问题:
请问一下的2句代码有什么不同?
BASEDATE:1901-01-01.
WORKDATE ---> 当天的日期。
C WORKDATE SUBDUR BASEDATE TEMPFIELD:*D
C EVAL TEMPFIELD=%DIFF(BASEDATE:WORKDATE:*DAYS)
刚开始在07.01测试的时候没问题,2句代码好像等价,今天去测试一下,竟然出了问题!!!莫名其妙!
高手帮帮忙,哪里不对?
Thanks.
回复 5# first_come
不用说隔天了,隔几十年都可以。
谢谢各位,关于3楼的,你的那个EVAL DURATION=%DIFF(CURTIM:ENDTIM:*SECONDS)中的%DIFF没见过啊,小弟寡闻啊.CURTIM&ENDTIM是怎么去相比较的,比如23:59:57和01:59:35也可以比较么?隔天了哦.....
本帖最后由 q疯哥p 于 2010-05-07 17:42 编辑
如何程序运行到一半就停了下来该怎么办。。。我觉得可以将其嵌到另一个程序中,在那计算时间差。
本帖最后由 franliu 于 2010-05-07 16:39 编辑
用 ILE RPG 非常容易。下面的代码供参考:
D STRTIM S Z
D ENDTIM S Z
D DURATION S 30P 0
C* Capture program start time
C TIME CURTIM
...
C* Capture program end time
C TIME ENDTIM
C* Calculate duration in seconds
C EVAL DURATION = %DIFF(STRTIM:ENDTIM:*SECONDS)
直接用subdur就可以了