生成纳秒级别的时间戳

问题

同步influxdb有些数据没有,不知道啥原因,后来百度发现时间需要唯一,毫秒还会重复,只能采用纳秒处理了

java实现

TimeStampUtils.java

package com.wujialiang;

/**
 * 获取纳秒值的工具类
 */
public class TimeStampUtils {

    /**
     * 递增数初始值
     */
    private static long randomNum = 1L;

    /**
     * 递增数最大值,可根据并发情况适当调整
     */
    private static final long RANDOM_NUM_MAX = 999L;

    public static long getTimeStamp() {
        long curRandomNum;
        synchronized (TimeStampUtils.class) {
            if (randomNum > RANDOM_NUM_MAX) {
                randomNum = 1;
            }
            curRandomNum = randomNum++;
        }
        return System.currentTimeMillis() * 1000000L + System.nanoTime() % 1000000L + curRandomNum;
    }
}

测试

public static void main( String[] args )
{
    for (int i = 0; i < 100; i++) {
        System.out.println(TimeStampUtils.getTimeStamp());
    }
}

在这里插入图片描述

C#实现

NanoHelper.cs

using System.Diagnostics;

namespace InfluxdbStu01;

public class NanoHelper
{
    private static readonly object lockObj = new object();

    /// <summary>
    /// 递增数初始值
    /// </summary>
    private static long randomNum = 1L;

    /// <summary>
    /// 递增数最大值,可根据并发情况适当调整
    /// </summary>
    private const long RANDOM_NUM_MAX = 999L;

    /// <summary>
    /// 返回纳秒
    /// </summary>
    /// <returns>返回的结果是纳秒</returns>
    public static long getTimeStamp()
    {
        long curRandomNum;
        lock (lockObj)
        {
            if (randomNum > RANDOM_NUM_MAX)
            {
                randomNum = 1;
            }

            curRandomNum = randomNum++;
        }

        long nanoPart = Stopwatch.GetTimestamp(); // 计时器刻度(不是纳秒)
        long nowTimestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
        /*
        皮秒 纳秒 微秒 毫秒 秒 ps、ns、us、ms、s 时间单位之间的换算
        1,000,000,000,000皮秒=1秒 (12个0)ps -> s
        1,000,000,000纳秒=1秒         (9个0) ns -> s
        1,000,000微秒=1秒                 (6个0)us -> s
        1,000毫秒=1秒                        (3个0) ms -> s
        */
        return  nowTimestamp* 1000000L
                + nanoPart % 1000000L + curRandomNum;
    }
}

测试

NanoHelper.getTimeStamp()

参考

https://blog.csdn.net/hahawangzi520/article/details/134846374

相关推荐

  1. python生成13位时间

    2024-06-08 00:20:04       35 阅读
  2. 时间,标准时间之间转化

    2024-06-08 00:20:04       62 阅读
  3. POSTGRESQL中时间奥秘timestamptz

    2024-06-08 00:20:04       38 阅读
  4. python时间时间字符串转化

    2024-06-08 00:20:04       34 阅读
  5. [C语言]时间

    2024-06-08 00:20:04       64 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-08 00:20:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-08 00:20:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-08 00:20:04       82 阅读
  4. Python语言-面向对象

    2024-06-08 00:20:04       91 阅读

热门阅读

  1. 区块链技术的应用场景和优势

    2024-06-08 00:20:04       34 阅读
  2. 九天毕昇深度学习平台 | TensorBoard使用

    2024-06-08 00:20:04       31 阅读
  3. Python 树状数组

    2024-06-08 00:20:04       28 阅读
  4. Mybatis配置

    2024-06-08 00:20:04       29 阅读
  5. Python怎么循环计数:深入解析与实践

    2024-06-08 00:20:04       26 阅读
  6. 【小海实习日记】golang-iris框架学习笔记

    2024-06-08 00:20:04       31 阅读