java - 我如何从 UUID 类型 1 中获取日期/时间
问题描述
我已包含以下 UUID 库
compile group: 'com.fasterxml.uuid', name: 'java-uuid-generator', version: '3.1.5'
在我的构建中。
我有一些这样的代码
NoArgGenerator timeBasedGenerator = Generators.timeBasedGenerator()
UUID tuid = timeBasedGenerator.generate()
Timestamp timestamp = new Timestamp ((tuid.timestamp()/1000) as Long)
Date dateTime = new Date (timestamp.getTime())
但是,当我尝试查看日期时,它与应有的日期完全不同,例如uid fef57eca-7c8b-11e8-bedd-992c2ac3197a was Sun Feb 06 07:55:54 GMT 6327
,今天是30/06/2018
有谁知道如何使用fasterxml.uuid
库从基于时间的 UUID 中正确提取真实日期和时间?
但难倒
ps改为尝试这个
UUID tuid = timeBasedGenerator.generate()
Long t = tuid.timestamp()
Timestamp timestamp = new Timestamp (t)
Date dateTime = new Date (timestamp.getTime())
它给出了一个 uidff79d7d9-7cb5-11e8-976c-6ba57a5e9636
和日期Thu Aug 14 11:11:40 BST 4359073
解决方案
要获得完整的 100ns 精度java.util.Instant
,您可以执行以下操作:
private static final long NUM_HUNDRED_NANOS_IN_A_SECOND = 10_000_000L;
private static final long NUM_HUNDRED_NANOS_FROM_UUID_EPOCH_TO_UNIX_EPOCH = 122_192_928_000_000_000L;
/**
* Extracts the Instant (with the maximum available 100ns precision) from the given time-based (version 1) UUID.
*
* @return the {@link Instant} extracted from the given time-based UUID
* @throws UnsupportedOperationException If this UUID is not a version 1 UUID
*/
public static Instant getInstantFromUUID(final UUID uuid) {
final long hundredNanosSinceUnixEpoch = uuid.timestamp() - NUM_HUNDRED_NANOS_FROM_UUID_EPOCH_TO_UNIX_EPOCH;
final long secondsSinceUnixEpoch = hundredNanosSinceUnixEpoch / NUM_HUNDRED_NANOS_IN_A_SECOND;
final long nanoAdjustment = ((hundredNanosSinceUnixEpoch % NUM_HUNDRED_NANOS_IN_A_SECOND) * 100);
return Instant.ofEpochSecond(secondsSinceUnixEpoch, nanoAdjustment);
}
推荐阅读
- node.js - 如何获取对 Nextjs 服务器的引用
- pine-script - 使用我构建的这段代码,我看不到任何性能结果。有人可以澄清吗?
- php - 如何在 PHP 中解密这个 CryptoJS 加密(提供的函数)
- python - 我是否正确使用装饰器?
- c# - 输入 1 2 5 8 7 3 10 6 4 9,输出 1 2 3 5 7 8 10 6 4 9
- c# - 如何在 asp.net 框架中的 Swagger UI 上添加身份验证令牌而不转换为 asp.net 核心
- django - django-mptt 计算 add_related_count 中的项目?
- flutter - 如何使用 Riverpod Notifier 创建下拉按钮?
- r - 如何使用 RSelenium 抓取下拉菜单的文本?
- filter - 过滤查询集