package time
- Alphabetic
- Public
- Protected
Value Members
- 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:
- 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.Timestampand a PostgreSQLtimestampcolumn 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 useMagpieInstant.now()as well.Prefer
MagpieInstant.now()over the JDK clock throughout the codebase; a scalastyle rule (customIdinstant.now) enforces this. - Here, when instants are created (