簡體   English   中英

從uuid1提取時間戳

[英]Extract timestamp from uuid1

對於這個非常基本的主題,我們感到很抱歉,但是經過多次Google搜索后,我找不到正確的答案

我有一個uuid1並想提取其中包含的時間戳,這似乎是100%可能的,因為當我嘗試使用ce53f406時,此網站為我提供了正確的答案: https ://www.famkruithof.net/uuid/uuidgen -9ba0-11e6-a6e8-e715bd508dc3

經過研究,我沒有找到任何簡單的解決方案...沒有基本的解決方案可以提取此時間戳?

最好的祝福,

這個問題突然出現在我的雷達上,因為它被標記為“ php”。 如果您正在尋找一種PHP解決方案來從版本1 UUID中獲取時間戳,則可以使用ramsey / uuid庫來解析UUID。 (這是我的圖書館,所以我有點偏頗。)

使用Composer安裝庫:

composer require ramsey/uuid

然后,您可以執行以下操作從UUID獲取PHP DateTime對象:

$myUuid = 'ce53f406-9ba0-11e6-a6e8-e715bd508dc3';

$uuid = \Ramsey\Uuid\Uuid::fromString($myUuid);

echo 'UUID timestamp (60-bit integer): ' . $uuid->getTimestamp() . "\n";
echo 'Formatted date/time: ' . $uuid->getDateTime()->format('r') . "\n";
echo 'Unix timestamp: ' . $uuid->getDateTime()->getTimestamp() . "\n";

本示例將打印出如下內容:

UUID timestamp (60-bit integer): 136967953640059910
Formatted date/time: Wed, 26 Oct 2016 17:22:44 +0000
Unix timestamp: 1477502564

觀察您提供的UUID:

ce53f406-9ba0-11e6-a6e8-e715bd508dc3

第一個八度是ce53f406 這是十六進制數,單位為100納秒。 意思是,這部分將每100納秒間隔增加1。 此八度可以具有的最大數量是ffffffff 一旦達到ffffffff ,最左邊的八度將重置為0,而下一個八度( 9ba0 )將增加1,依此類推。 因此,每隔100納秒間隔會生成UUID,如下所示:

ce53f406-9ba0-11e6-a6e8-e715bd508dc3
ce53f407-9ba0-11e6-a6e8-e715bd508dc3
ce53f408-9ba0-11e6-a6e8-e715bd508dc3
ce53f409-9ba0-11e6-a6e8-e715bd508dc3
ce53f40a-9ba0-11e6-a6e8-e715bd508dc3
.
.
.
fffffffd-9ba0-11e6-a6e8-e715bd508dc3
fffffffe-9ba0-11e6-a6e8-e715bd508dc3
ffffffff-9ba0-11e6-a6e8-e715bd508dc3
00000000-9ba1-11e6-a6e8-e715bd508dc3

現在,您知道了邏輯,並且如果您知道一個UUID的時間戳,則應該可以通過比較獲得另一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM