Pharos
Global

UnixNano - 获取纳秒级时间戳

获取当前时刻的纳秒级 Unix 时间戳。

语法

python
timestamp = UnixNano()

参数

无参数。

返回值

返回当前时刻的纳秒级 Unix 时间戳(number)。

示例

示例1: 获取纳秒级时间戳

python
# 获取纳秒级时间戳
ts = UnixNano()
Log(f"当前纳秒级时间戳: {ts}")
# 输出示例: 1574993606123456789

示例2: 性能测试

python
# 测量代码执行时间(纳秒级精度)
start = UnixNano()

# 执行一些操作
for i in range(1000):
    exchange.GetTicker()

end = UnixNano()
elapsed_ns = end - start
elapsed_ms = elapsed_ns / 1_000_000  # 转换为毫秒

Log(f"执行耗时: {elapsed_ns} 纳秒")
Log(f"执行耗时: {elapsed_ms:.2f} 毫秒")

示例3: 生成唯一标识

python
# 使用纳秒时间戳生成唯一ID
order_id = f"ORDER_{UnixNano()}"
Log(f"订单ID: {order_id}")
# 输出: ORDER_1574993606123456789

示例4: 高精度时间间隔测量

python
import time

# 测量 Sleep 的实际精度
start = UnixNano()
Sleep(100)  # 睡眠 100 毫秒
end = UnixNano()

actual_sleep = (end - start) / 1_000_000  # 转换为毫秒
Log(f"预期睡眠: 100 毫秒")
Log(f"实际睡眠: {actual_sleep:.3f} 毫秒")
Log(f"误差: {abs(actual_sleep - 100):.3f} 毫秒")

示例5: 请求速率控制

python
class RateLimiter:
    def __init__(self, max_requests_per_second):
        self.interval_ns = 1_000_000_000 // max_requests_per_second
        self.last_request_time = 0
    
    def wait_if_needed(self):
        """如果请求过快,等待到允许时间"""
        now = UnixNano()
        if self.last_request_time > 0:
            elapsed = now - self.last_request_time
            if elapsed < self.interval_ns:
                wait_ns = self.interval_ns - elapsed
                wait_ms = wait_ns / 1_000_000
                Sleep(int(wait_ms))
        self.last_request_time = UnixNano()

# 限制为每秒最多 10 次请求
limiter = RateLimiter(10)

for i in range(20):
    limiter.wait_if_needed()
    ticker = exchange.GetTicker()
    Log(f"第 {i+1} 次请求完成")

示例6: 对比不同时间精度

python
import time

# 获取不同精度的时间戳
ts_seconds = Unix()            # 秒级
ts_ms = int(time.time() * 1000)  # 毫秒级
ts_ns = UnixNano()             # 纳秒级

Log(f"秒级时间戳:   {ts_seconds}")
Log(f"毫秒级时间戳: {ts_ms}")
Log(f"纳秒级时间戳: {ts_ns}")

# 输出示例:
# 秒级时间戳:   1574993606
# 毫秒级时间戳: 1574993606123
# 纳秒级时间戳: 1574993606123456789

注意事项

  1. 精度差异:

    • Unix() 返回秒级时间戳(10位数字)
    • 毫秒级时间戳(13位数字)
    • UnixNano() 返回纳秒级时间戳(19位数字)
  2. 应用场景:

    • 性能测试和基准测试
    • 高精度时间间隔测量
    • 生成唯一标识符
    • 精确的请求速率控制
  3. 数值范围: 纳秒级时间戳是一个很大的数字,注意数值溢出

  4. 系统时钟: 依赖于系统时钟,系统时钟调整会影响结果

相关 API

  • Unix - 获取秒级时间戳
  • _D - 时间戳转换为字符串
  • Sleep - 休眠指定毫秒数