get the unix timestamp from type 1 uuid

前端 未结 4 935
挽巷
挽巷 2021-01-12 22:13

In our java application we are trying to get the unix time from the type 1 uuid. But its not giving the correct date time values.

long time = uuid.timestamp(         


        
相关标签:
4条回答
  • 2021-01-12 22:25

    In my case, the following code worked.

        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
    
    0 讨论(0)
  • 2021-01-12 22:30

    If you using datastax driver, it's:

    UUIDs.unixTimestamp(uuid)

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

    0 讨论(0)
  • 2021-01-12 22:32

    From the docs for timestamp():

    The resulting timestamp is measured in 100-nanosecond units since midnight, October 15, 1582 UTC.

    So you need to offset it from that. For example:

    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
    
    0 讨论(0)
  • 2021-01-12 22:39

    In the case someone else needs it:

    long milliseconds = UuidUtil.extractUnixMilliseconds(uuid);
    

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

    0 讨论(0)
提交回复
热议问题