如何生成基于时间的UUID?

时间:2013-08-15 01:20:22

标签: java

我想在java中生成基于时间的UUID - java.util.UUID.randomUUID()生成UUID版本4.如何生成版本1(基于时间)的UUID?是否有一个单独的库,或者它是Java 7 API中提供的一些,我错过了它。

7 个答案:

答案 0 :(得分:10)

使用com.eaio.uuid.UUID时要非常小心,如果需要按当前时间以外的时间生成GUID,因为这将始终在给定时间内生成相同的UUID。因此,如果您的数据需要生成UUID,其中记录可能具有相同的时间,则会生成相同的UUID。

我们需要这个来为前面创建的记录生成UUID,同时还有多个记录,我们试图通过尝试使用UUIDGen.createTime()来调整它。我们发现它有一个副作用来改变记录乱序的时间。如果创建UUID的后续请求的时间戳早于上一个请求,则最终会得到UUID,这基于先前请求的时间戳。

在完成所有分析后,我们必须在创建时简单地返回创建UUID,这样我们就不必将其作为参数传递。无论我们在以后生成UUID时采用哪种解决方案,每个解决方案都有一个缺点。

答案 1 :(得分:9)

 $('.inbox-bcc').click(function(){
     console.log('bcc');
     $('#divBCC').toggleClass('hide');
 });
});

看看 https://docs.datastax.com/en/drivers/java/2.0/com/datastax/driver/core/utils/UUIDs.html

答案 2 :(得分:4)

FasterXML Java Uuid Generator(JUG)

https://github.com/cowtowncoder/java-uuid-generator

UUID uuid = Generators.timeBasedGenerator().generate();

答案 3 :(得分:1)

要测试我们的应用程序,我们必须使用com.eaio.uuid.UUID生成具有基于时间的UUID的数据,我们生成了旧的时间戳UUID,因此能够根据我们的测试用例来控制时间戳。 注意:-我们无法生成将来的时间戳UUID

我们通过以下方式生成-

import com.eaio.uuid.UUID;
import com.eaio.uuid.UUIDGen;

    long time = DateUtil.getEpochtimeFromDate("21-06-2018 12:30:31", "dd-M-yyy hh:hh:ss");
    UUID time_based_uuid = new UUID(UUIDGen.createTime(time), UUIDGen.getClockSeqAndNode());

答案 4 :(得分:1)

要在Maven项目中生成基于时间的UUID,您需要添加Generator的依赖项,即生成基于时间的UUID。

    <dependency>
        <groupId>com.fasterxml.uuid</groupId>
        <artifactId>java-uuid-generator</artifactId>
        <version>3.1.4</version>
    </dependency>

如果您有一个普通的Java项目,则必须导入Generator的库 java-uuid-generator

然后生成UUID:

UUID uuid= Generators.timeBasedGenerator().generate();

现在,如果您要检查UUID时间和日期check here

输入生成的UUID和您当前的时区。

答案 5 :(得分:1)

版本1表示空间时间

中的一个点

Version 1 UUID实际上代表了时间在时间上的一个点。

“空格”部分是从计算机的网络端口获取的MAC address,以唯一地标识生成ID的位置(几乎是唯一的,通过网络分配MAC地址存在一些臭名昭著的问题)硬件制造商)。

“时间”部分是60位时间戳记,是自nanosecond midnight 15 October 1582开始的100-Coordinated Universal Time (UTC)个间隔的数量。

Java省略了版本1

您已经注意到,Java规范不需要实施版本1 UUID。

大概是由于潜在地泄露您的MAC地址和创建时间而引起的安全和隐私问题。

第三方实现

在其他《答案》中可以看到,存在第1版UUID的第三方实现。

在库溢出中,关于库建议的问题不在这里。所以我在姊妹网站 Software Recommendations Stack Exchange 上问了问题Library to generate Version 1 UUIDs to be called from Java

这是这里和其他地方似乎仍在积极支持的其他答案中提到的实现的简要清单。

答案 6 :(得分:0)

类型1 UUID的

Cassandra's implementationusage 请注意,由于已知的bug

,您不会比较uuid1> uuid2等这些uuid