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

时间:2014-02-27 08:45:20

标签: java uuid hector

我使用以下代码

为用户创建登录ID
String login = me.prettyprint.cassandra.utils.TimeUUIDUtils.getUniqueTimeUUIDinMillis().toString();

现在我需要将此登录名转换回long,因此我使用以下代码

long timeStamp = java.util.UUID.fromString(login).timestamp();

现在我想从timeStamp返回我的登录信息。我怎么能这样做??

2 个答案:

答案 0 :(得分:0)

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

请参阅https://www.ietf.org/rfc/rfc4122.txt,第4.1.2节:时间戳提取time_lowtime_midtime_hi_and_version字段。从技术上讲,如果您知道时间戳以及clock_seq_hi_and_reservedclock_seq_lownode字段的值,则可以重建初始UUID。但请查看该文档的第4.2.1节 - 您可以尝试通过假设它与某个MAC地址相关来猜测node值,但您没有关于时钟序列的正确值的信息。

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

答案 1 :(得分:0)

      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);

这有效!!