从类型1 uuid获取unix时间戳

时间:2012-10-25 14:19:43

标签: java uuid unix-timestamp

在我们的java应用程序中,我们试图从类型1 uuid获取unix时间。 但它没有给出正确的日期时间值。

long time = uuid.timestamp();
time = time / 10000L; // Dividing by 10^4 as its in 100 nanoseconds precision 
Calendar c = Calendar.getInstance();
c.setTimeInMillis(time);
c.getTime();

有人可以帮忙吗?

编辑:修正了除数(10 ^ 4)

4 个答案:

答案 0 :(得分:11)

来自timestamp()的文档:

  

自UTC时间1582年10月15日午夜起,生成的时间戳以100纳秒为单位进行测量。

所以你需要从中抵消它。例如:

Calendar uuidEpoch = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
uuidEpoch.clear();
uuidEpoch.set(1582, 9, 15, 0, 0, 0); // 9 = October
long epochMillis = uuidEpoch.getTime().getTime();

long time = (uuid.timestamp() / 10000L) + epochMillis;
// Rest of code as before

答案 1 :(得分:5)

如果您使用datastax驱动程序,那就是:

UUIDs.unixTimestamp(UUID)

http://www.datastax.com/drivers/java/2.0/com/datastax/driver/core/utils/UUIDs.html#unixTimestamp(java.util.UUID)

答案 2 :(得分:0)

就我而言,以下代码有效。

    final long NUM_100NS_INTERVALS_SINCE_UUID_EPOCH = 0x01b21dd213814000L;
    UUID uuid = UUID.fromString("6470d760-d93d-11e9-8b32-858313a776ba");
    long  time = (uuid.timestamp() - NUM_100NS_INTERVALS_SINCE_UUID_EPOCH) / 10000;
    // Rest of code as before

答案 3 :(得分:0)

如果其他人需要它:

long milliseconds = UuidUtil.extractUnixMilliseconds(uuid);

https://github.com/f4b6a3/uuid-creator