object MagpieInstant
Utility for creating millisecond-precision java.time.Instant values in production code.
On Java 9+, the JDK clock can produce instants with sub-millisecond (typically microsecond) precision; on Java 8 it was millisecond-resolution. We deliberately normalize all instants to millisecond precision so behavior matches the pre-Java-9 baseline and, crucially, so that an in-memory instant compares equal to the same instant after it is persisted to and read back from the database.
The normalization is enforced in two places that must stay in sync:
- Here, when instants are created (
now()andtoMagpieInstant). 2. At the Slick column boundary in com.silectis.magpie.metadata.db.InstantColumnType, which truncates on both write and read.
The millisecond cap is our own choice, not a limitation of the storage layer: both
java.sql.Timestamp and a PostgreSQL timestamp column can hold sub-millisecond values, so the
DB-boundary truncation is NOT redundant with this utility and must not be removed. Instants that
are serialized outside the Slick column mapping (for example embedded in a JSON details blob via
Play JSON) bypass that boundary, so those call sites must use MagpieInstant.now() as well.
Prefer MagpieInstant.now() over the JDK clock throughout the codebase; a scalastyle rule
(customId instant.now) enforces this.
- Alphabetic
- By Inheritance
- MagpieInstant
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Type Members
- implicit class InstantOps extends AnyRef
Adds a
toMagpieInstantmethod to any java.time.Instant that truncates it to millisecond precision for database compatibility.
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @IntrinsicCandidate() @native()
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @IntrinsicCandidate() @native()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @IntrinsicCandidate() @native()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @IntrinsicCandidate() @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @IntrinsicCandidate() @native()
- def now(): Instant
Returns the current instant truncated to millisecond precision.
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
Deprecated Value Members
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated
(Since version 9)