SJT1
March 2, 2022, 12:01pm
1
Some days it takes me a while to get started. I need to warm up my hands and brain. Hot coffee and a small problem help.
.z.p
gives me Co-ordinated Universal Time. A neat way to convert that into a string in the unambiguous ISO 8601 format ? That is
q).z.p 2022.03.02D11:50:33.883331000
to give "2022-03-02T11:50:33.883"
You can use the built in .h.iso8601
q).h.iso8601 .z.p “2022-03-02T12:27:37.506760000” q)-6_.h.iso8601 .z.p “2022-03-02T12:27:37.506”
SJT1
March 2, 2022, 2:13pm
3
Doesnt get easier than that!
But the challenge is to code it in q.
I would do
@[-6_string .z.p; 4 7 10; :; “–T”]
or if you prefer narrow square brackets then
@[; 4 7 10; :; “–T”] -6_string .z.p
I took a similar approach
@[;4 7;:;“-”] string `datetime$.z.p
Haha. Nice! The good old datetime! I already erased it from my memory
SJT1
March 3, 2022, 10:05am
7
Too easy? Too
unnecessary? Lets kick it up.
q)ts: .z.d+.z.t q).h.iso8601 ts "2022-03-02T09:12:34.684000000" q).dt.fmtd[;ts] each `iso`dmy`mdy "2022-03-02" "2/3/2022" "3/2/2022"
Write .dt.fmtd
without control words: no if
, do
, while
or Cond .
Here is my quick attempt for which I’m sure there is a much more elegant solution
.dt.fmtd:{(iso
dmymdy!({ssr[string x;".";"-"]};{"/" sv string
ddmm
year$x};{“/” sv string mm
ddyear$x}))[x]
date$y}
SJT1
March 3, 2022, 12:17pm
9
Elegant! But is the datetime type not deprecated?
Very well gentlemen, I raze you a substitute for our departed datetime type with
date`time
raze (ssr[;“.”;“-”];“T”,)@'string date
time$.z.p / or alternatively “T” sv (ssr[;“.”;“-”];::)@'string date
time$.z.p
SJT1
March 3, 2022, 3:47pm
11
Nice! Though I always wonder about using powerful ssr
to replace just one character with another.
q)?[;“-”;] . reverse 1(“.”=)\ string `date$.z.p “2022-03-03”
(The Zen monks wanted to play.)
Rolf1
March 4, 2022, 11:12am
12
q)f:"T"0:2 1#“dt”$ q)f .z.p “2022-03-04T11:07:52.077” / if you want to be picky about the type q)f:first"T"0:2 1#“dt”$ q)f .z.p “2022-03-04T11:08:49.988”
SJT1
March 7, 2022, 11:32am
13
Ingenious use of Prepare Text !
Maybe a simpler version of it would be "T"sv string"dt"$.z.p
.
Rolf1
March 7, 2022, 11:39am
14
0: gets you the dashes in the date
I would love to know how / why this period to dash conversion is happening if anyone can shed some light?
SJT1
March 8, 2022, 11:30am
16
I speculate its because its the international standard for dates so Prepare Text uses it.
At any rate I should note in the Reference that it does so.
SJT1
March 21, 2022, 2:59pm
17