Подтвердить что ты не робот

Как создать UUID с учетом времени?

Я хочу генерировать UUID с учетом времени в java - java.util.UUID.randomUUID() кодирует версию UUID 4. Как сгенерировать UUID с 1-й версией? Есть ли для этого отдельная библиотека, или она какая-то, как это предусмотрено в Java 7 API, и я ее пропускаю.

4b9b3361

Ответ 1

Будьте очень осторожны, используя com.eaio.uuid.UUID, если вам нужно генерировать GUID по времени, отличному от текущего, так как это всегда будет генерировать тот же UUID для заданного времени. Поэтому, если ваши данные требуют генерации UUID, где записи могут иметь одно и то же время, это будет генерировать одинаковый UUID.

Нам понадобилось это, чтобы генерировать UUID для записей, которые создаются заранее, а также несколько записей в то же время, мы попытались настроить его, пытаясь использовать UUIDGen.createTime(). Мы обнаружили, что он имеет побочный эффект, чтобы изменить время выхода из строя. Если последующий запрос на создание UUID имеет отметку времени старше предыдущего запроса, вы получите UUID, основанный на предыдущей отметке времени запроса.

После всего анализа нам пришлось просто вернуться к созданию UUID во время создания, так что нам не нужно передавать его в качестве аргумента. Какое бы решение мы придумали для генерации UUID в более позднее время, у каждого из них есть недостаток.

Ответ 5

Чтобы протестировать наше приложение, мы должны сгенерировать данные, которые имеют UUID на основе времени, используя com.eaio.uuid.UUID, мы сгенерировали старые UUID метки времени и, следовательно, смогли контролировать временную метку в соответствии с нашими тестовыми примерами. Примечание: - Мы не можем сгенерировать будущую временную метку UUID

Мы сгенерированы ниже:

import com.eaio.uuid.UUID;
import com.eaio.uuid.UUIDGen;

    long time = DateUtil.getEpochtimeFromDate("21-06-2018 12:30:31", "dd-M-yyy hh:hh:ss");
    UUID time_based_uuid = new UUID(UUIDGen.createTime(time), UUIDGen.getClockSeqAndNode());