C与Java中取精确到毫秒的时间

 我们在编程中经常会为了测试性能,要取一个操作前后的时间差。在java中很简单,用System.currentTimeMillis()函数,就能够得到当前时间,精度为毫秒。在c语言中,大多数的日期类函数都是精确到秒的,如time(),localtime()。精确到毫秒的函数有ftime(),gettimeofday(),都是返回一个结构。其中ftime()在time.h中定义,返回一个struct timeb的结构,包含了秒和毫秒。
    现在问题来了,我需要从c程序发起corba调用,调用到java程序,再返回给c程序,要求计算出c到java,java到c的调用时间。java的System.currentTimeMillis()函数返回一个很大的long正整数,查文档是从1970年1月1日到当前的毫秒数(三十多年了,换算成毫秒,是一个很大的数了)。而在c中用ftime()得到的结构,秒乘以1000加上毫秒,居然是个负数,虽然也是在一秒一秒地递增,换算起来这些时间大概有17天,这是什么意思呢?关键是两种语言的基准时间不同,我怎么计算他们之间的时间差啊。犯难了。
    经再一次测试,哈,问题找到了。原来timeb结构中定义秒字段的是一个int类型,我先给它乘以1000,它就溢出了,变成了负值,其实本来的值还是正数的。再经过简单的计算,它也是从1970年1月1日开始计时的,原来c和java中是以一个基准来计算时间的,太好了,这样我就能够用c和java中取出的时间值直接做减法了。
    从这里也可以看出,c语言追求的是效率,为了节省内存,只用一个int值存放秒数,害的溢出了。而gettimeofday()函数经测试,精度比较差,原因未知。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值