2014-02-27 101 views
1

創建我的登錄ID使用下面的代碼如何時間戳轉換回相同的UUID字符串

String login = me.prettyprint.cassandra.utils.TimeUUIDUtils.getUniqueTimeUUIDinMillis().toString(); 

現在我有這個登錄轉換需求的用戶返回到長,所以我用下面的代碼

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

現在我想從timeStamp重新登錄。我怎樣才能做到這一點。?

回答

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

這工程!

0

UUID.timestamp()從構成UUID的總共128位中提取60位。

看看https://www.ietf.org/rfc/rfc4122.txt,第4.1.2節:時間戳記提取time_low,time_midtime_hi_and_version字段。從技術上講,如果知道時間戳和clock_seq_hi_and_reserved,clock_seq_lownode字段的值,則可以重新構建初始UUID。但請查看該文檔的第4.2.1節 - 您可以嘗試通過假設它與某個MAC地址相關來猜測node的值,但是您沒有關於時鐘序列正確值的信息。

最後,從時間戳重建UUID是不可行的。如果你需要整個128位的UUID,你將不得不以完整的形式傳遞它。

相關問題