java nanoTime与C ++纳秒

问题描述 投票:-2回答:2

我想从两种语言中打印出纳米时间并比较其值。

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中没有微秒。

有人可以帮我吗?谢谢。

java c++ c++11 time chrono
2个回答
1
投票

读取the Javadoc of System.nanoTime()(添加了重点):

此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关。 返回的值表示自某个固定但任意的起始时间以来的纳秒(可能在将来,因此值可能为负)。在Java虚拟机实例中,此方法的所有调用都使用相同的源。其他虚拟机实例可能使用其他来源。

另一方面,在您的C ++代码中,System.nanoTime()是自纪元以来的时间(假定该方法的名称不是随意命名的;您也可以检查其文档)。

[since_epoch返回:

[当前时间与UTC 1970年1月1日午夜之间的差,以毫秒为单位。

所以that也返回从纪元开始的时间。

文档是开始了解方法行为的好地方。


0
投票

我设法用System.currentTimeMillis()来获取值

Java TimeUnit toNanos
© www.soinside.com 2019 - 2024. All rights reserved.