在我们的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)
答案 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)
答案 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);