Packages

package time

Ordering
  1. Alphabetic
Visibility
  1. Public
  2. Protected

Value Members

  1. object MagpieInstant

    Utility for creating millisecond-precision java.time.Instant values in production code.

    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.

Ungrouped