【问题标题】:Oracle equivalent for java's System.nanoTime()Oracle 等效于 java 的 System.nanoTime()
【发布时间】:2017-09-15 09:47:06
【问题描述】:

在 oracle 中是否有 java 的“System.nanoTime()”的等价物? 在 java System.nanoTime() 中返回类似于“246193102011083”的内容。

【问题讨论】:

标签: java oracle


【解决方案1】:

你可以使用:

SELECT SYSTIMESTAMP(9) FROM DUAL;

注意 - 在 Solaris 机器上进行测试时,我只能看到微秒精度;时间戳的最后 3 位数字始终显示为 000。在 Windows 机器上,我只能看到毫秒精度,因此您获得的精度可能取决于操作系统(或其他因素)。

如果您希望它从一个纪元(例如 1970-01-01)开始以纳秒为单位,那么:

SELECT   EXTRACT( DAY    FROM time ) * 24 * 60 * 60 * 1e9
       + EXTRACT( HOUR   FROM time )      * 60 * 60 * 1e9
       + EXTRACT( MINUTE FROM time )           * 60 * 1e9
       + EXTRACT( SECOND FROM time )                * 1e9 AS nanotime
FROM ( SELECT SYSTIMESTAMP(9) - TIMESTAMP '1970-01-01 00:00:00 UTC' AS time FROM DUAL );

你也可以使用:

CREATE FUNCTION nanotime RETURN NUMBER
  AS LANGUAGE JAVA NAME 'java.lang.System.nanoTime() return long';
/

SELECT nanotime() FROM DUAL;

注意 - Solaris 和 Windows 在我测试时似乎都提供微秒级精度。

【讨论】:

  • 但是每次我看到最后三个零。这是否意味着它只有微秒精度?例如:“1505470076941452000”
  • 显然只有微秒。
  • nanoTime 不是时钟时间,而是具有 nano 精度的检查点,将与另一个 nano 调用一起使用,以测量代码执行中两点之间的位移。
猜你喜欢
  • 2013-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2011-05-01
相关资源
最近更新 更多