c与java中取精确到毫秒的时间

来源:百度文库 编辑:神马文学网 时间:2024/04/28 13:05:51
我们在编程中经常会为了测试性能,要取一个操作前后的时间差。在java中很简单,xO)ru垠o:$X教g
用System.currentTimeMillis()函数,m;1o供2.{azs2e&z;@
就能够得到当前时间,精度为毫秒。在c语言中,大多数的日期类函数都是精确到秒的,如time(),localtime()。精确到毫秒的函数有ftime(),gettimeofday(),业jP教A#:F,Rq国供U供垠-都是返回一个结构。其中ftime()在time.h中定义,返回一个struct timeb的结构,包含了秒和毫秒。
现在问题来了,t专91教(&教教ry&gcK
l,网网m2R&G#专dC0
我需要从c程序发起corba调用,m|1Or{ZG{无n教调用到java程序,再返回给c程序,要求计算出c到java,java到c的调用时间。java的System.currentTimeMillis()函数返回一个很大的long正整数,查文档是从1970年1月1日到当前的毫秒数(三十多年了,Tw[=k+nq7+.X件(换算成毫秒,是一个很大的数了)。而在c中用ftime()得到的结构,wRwY业专j_络K络中BGT:垠
秒乘以1000加上毫秒,m%["I的垠O6业@}zxq居然是个负数,虽然也是在一秒一秒地递增,换算起来这些时间大概有17天,这是什么意思呢?关键是两种语言的基准时间不同,我怎么计算他们之间的时间差啊。犯难了。
经再一次测试,哈,问题找到了。原来timeb结构中定义秒字段的是一个int类型,我先给它乘以1000,它就溢出了,变成了负值,其实本来的值还是正数的。再经过简单的计算,它也是从1970年1月1日开始计时的,原来c和java中是以一个基准来计算时间的,太好了,这样我就能够用c和java中取出的时间值直接做减法了。
从这里也可以看出,c语言追求的是效率,为了节省内存,只用一个int值存放秒数,害的溢出了。而gettimeofday()函数经测试,精度比较差,原因未知。