*/
public final static Instant TIMESTAMP_ZERO = ZonedDateTime.of(1582, 10, 15, 0, 0, 0, 0, ZoneOffset.UTC).toInstant();
+ /** Constructor based on a {@link UUID}. */
public TimeUuid(UUID uuid) {
super(uuid);
if (uuid.version() != 1 && uuid.variant() != 2)
Duration duration = Duration.between(TimeUuid.TIMESTAMP_ZERO, instant);
return durationToTimestamp(duration);
}
+
+ /**
+ * Crate a time UUID with this instant as timestamp and clock and node id set to
+ * zero.
+ */
+ public static UUID fromInstant(Instant instant) {
+ long timestamp = instantToTimestamp(instant);
+ long mostSig = toMostSignificantBits(timestamp);
+ UUID uuid = new UUID(mostSig, UuidFactory.LEAST_SIG_RFC4122_VARIANT);
+ return uuid;
+ }
+
+ /** Convert timestamp in UUID format to most significant bits of a time UUID. */
+ static long toMostSignificantBits(long timestamp) {
+ long mostSig = UuidFactory.MOST_SIG_VERSION1 | ((timestamp & 0xFFFFFFFFL) << 32) // time_low
+ | (((timestamp >> 32) & 0xFFFFL) << 16) // time_mid
+ | ((timestamp >> 48) & 0x0FFFL);// time_hi_and_version
+ return mostSig;
+ }
}