Packages

o

com.silectis.magpie.time

MagpieInstant

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:

  1. Here, when instants are created (now() and toMagpieInstant). 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.

Linear Supertypes
AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. MagpieInstant
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Type Members

  1. implicit class InstantOps extends AnyRef

    Adds a toMagpieInstant method to any java.time.Instant that truncates it to millisecond precision for database compatibility.

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##: Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  5. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @IntrinsicCandidate() @native()
  6. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  7. def equals(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef → Any
  8. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @IntrinsicCandidate() @native()
  9. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @IntrinsicCandidate() @native()
  10. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  11. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  12. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @IntrinsicCandidate() @native()
  13. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @IntrinsicCandidate() @native()
  14. def now(): Instant

    Returns the current instant truncated to millisecond precision.

  15. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  16. def toString(): String
    Definition Classes
    AnyRef → Any
  17. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  18. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()
  19. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])

Deprecated Value Members

  1. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable]) @Deprecated
    Deprecated

    (Since version 9)

Inherited from AnyRef

Inherited from Any

Ungrouped