2024-12-24 Thoughts on practical date/time formats solyga@gmx.de requirements 1 resolution at least 1ms 2 date representation around 'now' shall be exact (well) known formats a seconds since 1970-01-01 -> breaks req 1 b date = days since minYear-01-01, time = milliseconds since midnight 1 maxTime (+1) = 24 * 3600 * 1000 = 86400000 = 5265C00H -> CARD32 for req 1 2 CARD16 allows for 10000H / 365.2425 = 179 years -> too few for some general format -> CARD32 needed -> 8 bytes for date/time required c days since chosen reference day as LONGREAL, fraction represents time -> resolution at (start of) reference day = 2^(-52) d = 2.22E-16 * 86400 s = = 19.185E-12 s = 19.185 ps -> resolution 2000 years (= 730485 days) later: 730485 * 2^(-52) d = = 1.4014E-5 s = 14.014 µs 1 Pascal epoche: refDay = 1899-12-30 (two days off, thx to Lotus et al) resolution on 2024-12-24 (124 y = 45290 d): 45290 * 19.185E-12 s = = 8.6887E-7 s = 0.86887 µs 2 Christ epoche: refDay = 0000-01-01 (many days off - in nearly one million days) resolution on 2024-12-24 (2024 y = 739616 d): 739616 * 19.185E-12 s = = 1.4189E-5 s = 14.189 µs calendarian rules A 1d = 24h, 1h = (60min, 1min = 60s) 3600s (1d = 86400s, no leap seconds) B IsLeapYear( y ) := ( y MOD 4 = 0 ) & ( y MOD 100 # 0 ) OR ( y MOD 400 = 0 ) C DaysInYear( y ) := 365 + ORD( IsLeapYear( y ) ) D DaysInMonth( m, y ) := IF m = 2 THEN 28 + ORD( IsLeapYear( y ) ) ELSE 31 - ( ( m - 1 ) MOD 7 ) MOD 2 END E 1990-01-01 was a Monday F weekday rule...