我想从两种语言中打印出纳米时间并比较其值。
JAVA代码
long nano_startTime = System.nanoTime();
System.out.println(nano_startTime);
C ++代码
system_clock::time_point begin = system_clock::now();
auto since_epoch = begin.time_since_epoch(); // get the duration since epoch
std::cout << std::to_string(duration_cast<nanoseconds>(since_epoch).count()) << std::endl;
我希望结果是相同的,但结果不同...!
结果
JAVA: 4459739378141
C++ 1584649009920663623
BTW:如果我使用毫秒,则结果是等效的。但是我需要更精确的时间数据,但是java中没有微秒。
有人可以帮我吗?谢谢。
读取the Javadoc of System.nanoTime()
(添加了重点):
此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关。 返回的值表示自某个固定但任意的起始时间以来的纳秒(可能在将来,因此值可能为负)。在Java虚拟机实例中,此方法的所有调用都使用相同的源。其他虚拟机实例可能使用其他来源。
另一方面,在您的C ++代码中,System.nanoTime()
是自纪元以来的时间(假定该方法的名称不是随意命名的;您也可以检查其文档)。
[since_epoch
返回:
[当前时间与UTC 1970年1月1日午夜之间的差,以毫秒为单位。
所以that也返回从纪元开始的时间。
文档是开始了解方法行为的好地方。
我设法用System.currentTimeMillis()
来获取值
Java TimeUnit toNanos