我使用以下代码
为用户创建登录IDString login = me.prettyprint.cassandra.utils.TimeUUIDUtils.getUniqueTimeUUIDinMillis().toString();
现在我需要将此登录名转换回long,因此我使用以下代码
long timeStamp = java.util.UUID.fromString(login).timestamp();
现在我想从timeStamp返回我的登录信息。我怎么能这样做??
答案 0 :(得分:0)
UUID.timestamp()
从构成UUID的总128位中提取60位。
请参阅https://www.ietf.org/rfc/rfc4122.txt,第4.1.2节:时间戳提取time_low
,time_mid
和time_hi_and_version
字段。从技术上讲,如果您知道时间戳以及clock_seq_hi_and_reserved
,clock_seq_low
和node
字段的值,则可以重建初始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);
这有效!!