【问题标题】:Get the UNIX timestamp from UUID version 1从 UUID 版本 1 获取 UNIX 时间戳
【发布时间】:2012-10-15 18:14:05
【问题描述】:

在我们的 Java 应用程序中,我们尝试从 UUID version 1 获取 UNIX 时间。但它没有给出正确的日期时间值。

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

有人可以帮忙吗?

【问题讨论】:

  • 你不是除错了数字(10^8)吗? Timestamp 给出了 100 ns (10^-7 s) 块的数量,因此您需要 10^4 junk 才能获得 1 ms (10^-3 s)。因此,您必须除以 10000L。
  • @Halex 修复了除数。谢谢

标签: java uuid unix-timestamp


【解决方案1】:

来自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

【讨论】:

  • 你不是把uuid.timestamp()除以错误的数字(10^8)吗? Timestamp 给出了 100 ns (10^-7 s) 块的数量,因此您需要 10^4 junk 才能获得 1 ms (10^-3 s)。因此,您必须除以 10000L。 OP 在他的代码中有同样的错误。
  • 你无法想象我为自己在你的一个答案中发现一个小错误感到多么自豪:)
【解决方案2】:

如果您使用 datastax 驱动程序,则为:

UUIDs.unixTimestamp(uuid)

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

【讨论】:

    【解决方案3】:

    在我的例子中,以下代码有效。

        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
    

    【讨论】:

      【解决方案4】:

      如何使用来自uuid-creatorUuidUtil 从 UUID 中提取时间:

      Instant instant = UuidUtil.getInstant(uuid);
      
      long secs = instant.getEpochSecond(); // seconds since 1970-01-01
      long msecs = instant.toEpochMilli(); // millis since 1970-01-01
      

      【讨论】:

        猜你喜欢
        • 2016-10-09
        • 2011-12-08
        • 2014-10-28
        • 2012-12-09
        • 2012-08-05
        • 1970-01-01
        • 2012-03-17
        • 1970-01-01
        • 2016-05-14
        相关资源
        最近更新 更多