Java 如何将时间戳转换回相同的UUID字符串

Java 如何将时间戳转换回相同的UUID字符串,java,uuid,hector,Java,Uuid,Hector,我使用以下代码为用户创建登录id String login = me.prettyprint.cassandra.utils.TimeUUIDUtils.getUniqueTimeUUIDinMillis().toString(); long timeStamp = java.util.UUID.fromString(login).timestamp(); 现在我需要将这个登录名转换回long,所以我使用以下代码 String login = me.prettyprint.cassandra

我使用以下代码为用户创建登录id

String login = me.prettyprint.cassandra.utils.TimeUUIDUtils.getUniqueTimeUUIDinMillis().toString();
long timeStamp = java.util.UUID.fromString(login).timestamp();
现在我需要将这个登录名转换回long,所以我使用以下代码

String login = me.prettyprint.cassandra.utils.TimeUUIDUtils.getUniqueTimeUUIDinMillis().toString();
long timeStamp = java.util.UUID.fromString(login).timestamp();
现在我想从时间戳中恢复登录。我该怎么做呢?

UUID.timestamp()
从构成UUID的128位中提取60位

请看第4.1.2节:时间戳提取
time\u low
time\u mid
time\u hi\u和\u version
字段。从技术上讲,如果您知道时间戳以及
clock\u seq\u hi\u和
clock\u seq\u low
节点
字段的值,则可以重构初始UUID。但是查看该文档的第4.2.1节-您可以尝试猜测
节点
值,假设它与某个MAC地址相关,但您没有关于时钟序列正确值的信息

最后,根据时间戳重构UUID是不可行的。如果您需要整个128位UUID,则必须以完整形式传递它

      final long NUM_100NS_INTERVALS_SINCE_UUID_EPOCH = 0x01b21dd213814000L;

      UUID u1 = TimeUUIDUtils.getUniqueTimeUUIDinMillis();
      final long t1 = u1.timestamp();

      long tmp = (t1 - NUM_100NS_INTERVALS_SINCE_UUID_EPOCH) / 10000;

      UUID u2 = TimeUUIDUtils.getTimeUUID(tmp);
      long t2 = u2.timestamp();

      System.out.println(u2.equals(u1));
      System.out.println(t2 == t1);
这个有用