Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Реализация UUIDv7 в Delphi - RFC 9562

Delphi , Синтаксис , Шифрование

UUID (Universally Unique Identifier) — это уникальный идентификатор, который широко используется для различных целей, таких как идентификация ресурсов в компьютерных сетях. В этом материале мы рассмотрим реализацию UUID версии 7 (UUIDv7), определенную в RFC 9562, на платформе Delphi.

Что такое UUIDv7?

UUIDv7 — это версия UUID, которая была введена для обеспечения времени-сортируемости идентификаторов. Это означает, что UUIDv7 можно сортировать в порядке возрастания по времени их генерации. UUIDv7 используют 64-битное значение Unix timestamp (количество секунд с начала эпохи Unix) в качестве части своего значения.

Реализация UUIDv7 в Delphi

Vincent Parrett поделился своей реализацией UUIDv7 для Delphi на GitHub. Эта имплементация работает с версиями XE2 и выше, включая Win32/Win64 платформы и все платформы начиная с версии 11.3.

Вот пример использования этой реализации:

var
  guid : TGuid;
begin
  guid := TUUIDv7Helper.CreateV7;
  writeln(guid.ToString);
end;

Извлечение даты и времени из UUIDv7

Edwin Yip задал вопрос, можно ли извлечь дату и время из UUIDv7. Vincent Parrett ответил, что в теории это возможно, если обратить процесс, который вставляет unix timestamp при генерации UUIDv7, и преобразовать результат в TDateTime.

Vincent также обновил свою реализацию, добавив метод CreatedUTC, который возвращает дату и время, соответствующие заданному UUIDv7:

var
  guid : TGuid;
begin
  guid := TUUIDv7Helper.CreateV7;
  writeln('UUID: ', guid.ToString);
  writeln('Created at: ', TUUIDv7Helper.CreatedUTC(guid).FormatSettings.LongDateTime);
end;

Альтернативное решение

Если вам нужно извлекать дату и время из UUIDv7, но вы не хотите использовать реализацию Vincent Parrett, вы можете написать собственную функцию. Вот пример кода, который извлекает unix timestamp из UUIDv7 и преобразует его в TDateTime:

function GetDateTimeFromUUIDV7(const Guid: TGuid): TDateTime;
var
  UnixTimestamp: Int64;
begin
  // Извлечь unix timestamp из UUIDv7 (64 бита)
  UnixTimestamp := (Int64(Guid.Data[0]) shl 56) +
                   (Int64(Guid.Data[1]) shl 48) +
                   (Int64(Guid.Data[2]) shl 40) +
                   (Int64(Guid.Data[3]) shl 32) +
                   (Int64(Guid.Data[4]) shl 24) +
                   (Int64(Guid.Data[5]) shl 16) +
                   (Int64(Guid.Data[6]) shl 8) +
                   Int64(Guid.Data[7]);

  // Преобразовать unix timestamp в TDateTime
  Result := EncodeDate(UnixTimestamp div 86400);
end;

Этот код извлекает unix timestamp (в секундах) из UUIDv7, а затем преобразует его в TDateTime с помощью функции EncodeDate. Обратите внимание, что мы делим unix timestamp на 86400 (количество секунд в сутках), так как EncodeDate esperaet количество дней с начала эпохи.

Заключение

В этом материале мы рассмотрели реализацию UUIDv7 в Delphi и обсудили, как извлечь дату и время из этого типа UUID. Мы также представили альтернативное решение для извлечения даты и времени из UUIDv7 без использования библиотеки Vincent Parrett.

Создано по материалам из источника по ссылке.

Материал рассказывает о реализации протокола UUID версии 7 (UUIDv7) в языке программирования Delphi, с примерами кода и обсуждением способов извлечения даты и времени из этого типа уникального идентификатора.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Шифрование ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-04-04 02:36:57/0.002946138381958/0