我很抱歉这个非常基本的话题,但经过多次Google搜索后我找不到合适的答案
我有一个uuid1并想提取其中包含的时间戳,这似乎是100%可能的,因为这个网站给了我正确的答案:https://www.famkruithof.net/uuid/uuidgen当我尝试使用ce53f406-9ba0-11e6- a6e8-e715bd508dc3
我的研究后没有找到任何简单的解决方案......没有基本的解决方案来提取这个时间戳?
致以最诚挚的问候,
答案 0 :(得分:2)
这个问题突然出现在我的雷达上,因为它标有“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
答案 1 :(得分:1)
观察您提供的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的时间戳,您应该能够通过比较获得另一个UUID。