──────────────────────────────
Date Conversion and Formatting
──────────────────────────────
Functions →days← and →date← convert between ⎕TS format and the number of days
since 1899-12-31 00:00:00 (sometimes called "International Day Number").
→timestamp← prefixes a character vector message with an ISO-standard(ish) date
and time. (ISO puts a 'T' between date and time).
⎕ts ⍝ Time now.
2000 12 25 13 48 52 0
days ⎕ts ⍝ IDN: Days since 1899-12-31
36884.58333
date 36884.61729 ⍝ Date from day number.
2000 12 25 14 48 53 856
⎕ts≡date days ⎕ts ⍝ Full circle.
1
2000 12 25 14 48 46 timestamp 'Now' ⍝ Formatted date.
2000-12-25 14:48:46 Now
A complication that arises with converting historical dates is the change from
the Julian to the →Gregorian_calendar←.
We can make a ⎕TS formatter by composing function →timestamp← with null:
show←timestamp∘''
show ⎕ts ⍝ Time now.
2000-12-25 14:15:44
Timestamps on file components are in 60th of a second since 1970-01-01. The
following function converts ⎕frdci time into day number. Notice that the const-
ants (days 1970 1 1) and (÷×/1 3/24 60) are evaluated at definition time and
bound as operands to the derived function.
compidn←(days 1970 1 1){⍺⍺+⍵⍵×(⎕io+2)⊃⎕frdci ⍺ ⍵}(÷×/1 3/24 60)
show date 1 compidn 3 ⍝ Write-time: fnum 1, component 3.
2000-12-25 14:09:16
⎕cr'compidn' ⍝ Canonical rep of derived function.
┌─────┬──────────────────────────┬──────────────┐
│25568│{⍺⍺+⍵⍵×(⎕IO+2)⊃⎕FRDCI ⍺ ⍵}│1.929012346E¯7│
└─────┴──────────────────────────┴──────────────┘
Here's a handy little function to return day-of-week from a ⎕TS-type argument:
dow←{(⎕io+7|⌊days ⍵)⊃'Sun' 'Mon' 'Tue' 'Wed' 'Thu' 'Fri' 'Sat'}
dow ⎕ts ⍝ TGI Friday!
Fri
Note that 1899-12-31 00:00:00 is an _arbitrary_ choice of "epoch" selected for
date representation with the ⎕SM/⎕SR character-based screen manager. We can
easily compose functions based on other starting points:
The Julian epoch started at noon on Jan 1st, ¯4712:
days_julian ← 2415019.5∘+∘(15821004∘days) ⍝ "Julian Days".
date_julian ← ¯115860∘date∘(-∘2415019.5)
days_mjd ← 15019∘+∘(15821004∘days) ⍝ "Modified Julian Days".
date_mjd ← ¯115860∘date∘(-∘15019)
unix_time ← 86400∘×∘(-∘25568)∘days ⍝ Secs since 1970-01-01 00:00:00.
unix_date ← date∘(+∘25568)∘(÷∘86400)
long_count ← mayan∘(1830735∘+∘days) ⍝ Mayan Long Count (584,285 corr.).
days_excel_1900 ← 1∘+days ⍝ Excel 1900 date system.
date_excel_1900 ← date∘(-∘1)
days_excel_1904 ← 1461∘+days ⍝ Excel 1904 date system.
date_excel_1904 ← date∘(-∘1461)
See also: days date cal timestamp mayan easter compidn
See also: Gregorian_calendar British_Calendar_Act_1751
Back to: contents
Back to: Workspaces