Purpose. Define the ephemeris-free mapping from a UTC timestamp to a human-checkable angle and sector used in SSM-Clock Stamp.
Definitions (UTC → angle/sector)
Let unix_seconds be POSIX time computed from iso_utc (UTC only; format YYYY-MM-DDThh:mm:ssZ).
- Angle wrap:
wrap360(x) = x - 360*floor(x/360) - Time→angle:
theta_deg = wrap360( (unix_seconds / 86400) * 360 ) - Sector (rasi):
rasi_idx = floor(theta_deg / 30)
Rate constant (for intuition)
Per-second advance (exact): dtheta_per_sec = 360/86400 = 0.0041666667 deg/s (recurring).
A 1-second change in iso_utc moves theta_deg by ~0.0041667 degrees; 30 degrees corresponds to 2 hours.
Deterministic procedure (must)
- Parse
iso_utcas UTC (no subseconds/offsets) →unix_seconds. - Compute raw angle:
theta_raw = (unix_seconds / 86400) * 360. - Wrap once:
theta_wrapped = wrap360(theta_raw)→ domain[0,360). - Print
theta_degwith exactlytheta_precdigits (default5) using IEEE-754 binary64 round-half-to-even. - Compute sector:
rasi_idx = floor( float(theta_deg) / 30 )→ integer in[0,11].
Ranges & invariants
theta_deg ∈ [0,360)after wrapping;rasi_idx ∈ {0..11}.theta_degmust be compared as a string printed with exactlytheta_precdigits.- The mapping uses only UTC arithmetic; no ephemeris or leap-year logic beyond POSIX time is involved.
Edge conditions
- Leap-second ban:
23:59:60is invalid; verifiers reject anyiso_utcwith:60. - Subseconds: not allowed;
iso_utcuses whole seconds only. - Timezones/offsets: not allowed;
Z(UTC) only.
Audit tip (optional)
For quick checks, verify that two successive seconds differ by ~0.0041667 degrees and yield the same rasi_idx until the next 30-degree boundary.
Navigation
Back: SSM-Clock Stamp – Stamp Format (1.1)
Next: SSM-Clock Stamp – File Hash (1.3)