# Five easy pieces

**URL:** <https://forum.kx.com/t/five-easy-pieces/12410>\
**Category:** Community Support\
**Tags:** blogs\
**Created:** [March 2, 2022, 12:01pm UTC](https://forum.kx.com/t/five-easy-pieces/12410 "2022-03-02T12:01:00Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![SJT1](https://avatars.discourse-cdn.com/v4/letter/s/eb8c5e/32.png) [@SJT1](https://forum.kx.com/u/SJT1)\
**Post date:** [March 2, 2022, 12:01pm UTC](https://forum.kx.com/t/five-easy-pieces/12410/1 "2022-03-02T12:01:00Z")

</div>

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"`

&nbsp;

---

<div class="post-metadata">

**Author:** ![MurrMack1](https://avatars.discourse-cdn.com/v4/letter/m/8e8cbc/32.png) [@MurrMack1](https://forum.kx.com/u/MurrMack1)\
**Post date:** [March 2, 2022, 12:31pm UTC](https://forum.kx.com/t/five-easy-pieces/12410/2 "2022-03-02T12:31:00Z")

</div>

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”

&nbsp;

---

<div class="post-metadata">

**Author:** ![SJT1](https://avatars.discourse-cdn.com/v4/letter/s/eb8c5e/32.png) [@SJT1](https://forum.kx.com/u/SJT1)\
**Post date:** [March 2, 2022, 2:13pm UTC](https://forum.kx.com/t/five-easy-pieces/12410/3 "2022-03-02T14:13:00Z")

</div>

Doesnt get easier than that!&nbsp;

But the challenge is to code it in q.

---

<div class="post-metadata">

**Author:** ![fbodon1](https://avatars.discourse-cdn.com/v4/letter/f/3be4f8/32.png) [@fbodon1](https://forum.kx.com/u/fbodon1)\
**Post date:** [March 3, 2022, 9:26am UTC](https://forum.kx.com/t/five-easy-pieces/12410/4 "2022-03-03T09:26:00Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![davidcrossey1](https://avatars.discourse-cdn.com/v4/letter/d/e68b1a/32.png) [@davidcrossey1](https://forum.kx.com/u/davidcrossey1)\
**Post date:** [March 3, 2022, 9:33am UTC](https://forum.kx.com/t/five-easy-pieces/12410/5 "2022-03-03T09:33:00Z")

</div>

I took a similar approach

@[;4 7;:;“-”] string `datetime$.z.p

&nbsp;

---

<div class="post-metadata">

**Author:** ![fbodon1](https://avatars.discourse-cdn.com/v4/letter/f/3be4f8/32.png) [@fbodon1](https://forum.kx.com/u/fbodon1)\
**Post date:** [March 3, 2022, 9:36am UTC](https://forum.kx.com/t/five-easy-pieces/12410/6 "2022-03-03T09:36:00Z")

</div>

Haha. Nice! The good old datetime! I already erased it from my memory

---

<div class="post-metadata">

**Author:** ![SJT1](https://avatars.discourse-cdn.com/v4/letter/s/eb8c5e/32.png) [@SJT1](https://forum.kx.com/u/SJT1)\
**Post date:** [March 3, 2022, 10:05am UTC](https://forum.kx.com/t/five-easy-pieces/12410/7 "2022-03-03T10:05:00Z")

</div>

Too easy? Too unnecessary? &nbsp;Lets 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.&nbsp;

---

<div class="post-metadata">

**Author:** ![davidcrossey1](https://avatars.discourse-cdn.com/v4/letter/d/e68b1a/32.png) [@davidcrossey1](https://forum.kx.com/u/davidcrossey1)\
**Post date:** [March 3, 2022, 10:46am UTC](https://forum.kx.com/t/five-easy-pieces/12410/8 "2022-03-03T10:46:00Z")

</div>

Here is my quick attempt for which I’m sure there is a much more elegant solution&nbsp;

.dt.fmtd:{(`iso`dmy`mdy!({ssr[string x;".";"-"]};{"/" sv string `dd`mm`year$x};{“/” sv string `mm`dd`year$x}))[x] `date$y}

&nbsp;

---

<div class="post-metadata">

**Author:** ![SJT1](https://avatars.discourse-cdn.com/v4/letter/s/eb8c5e/32.png) [@SJT1](https://forum.kx.com/u/SJT1)\
**Post date:** [March 3, 2022, 12:17pm UTC](https://forum.kx.com/t/five-easy-pieces/12410/9 "2022-03-03T12:17:00Z")

</div>

Elegant! But is the datetime type not deprecated?

---

<div class="post-metadata">

**Author:** ![davidcrossey1](https://avatars.discourse-cdn.com/v4/letter/d/e68b1a/32.png) [@davidcrossey1](https://forum.kx.com/u/davidcrossey1)\
**Post date:** [March 3, 2022, 12:46pm UTC](https://forum.kx.com/t/five-easy-pieces/12410/10 "2022-03-03T12:46:00Z")

</div>

Very well gentlemen, I _raze_ you a substitute for our departed&nbsp; `datetime type with `date`time

raze (ssr[;“.”;“-”];“T”,)@'string `date`time$.z.p / or alternatively “T” sv (ssr[;“.”;“-”];::)@'string `date`time$.z.p

&nbsp;

&nbsp;

---

<div class="post-metadata">

**Author:** ![SJT1](https://avatars.discourse-cdn.com/v4/letter/s/eb8c5e/32.png) [@SJT1](https://forum.kx.com/u/SJT1)\
**Post date:** [March 3, 2022, 3:47pm UTC](https://forum.kx.com/t/five-easy-pieces/12410/11 "2022-03-03T15:47:00Z")

</div>

Nice! Though I always wonder about using powerful `ssr` to replace just one character with another.&nbsp;

&nbsp;

q)?[;“-”;] . reverse 1(“.”=)\ string `date$.z.p “2022-03-03”

&nbsp;

(The Zen monks wanted to play.)&nbsp;

---

<div class="post-metadata">

**Author:** ![Rolf1](https://avatars.discourse-cdn.com/v4/letter/r/7c8e57/32.png) [@Rolf1](https://forum.kx.com/u/Rolf1)\
**Post date:** [March 4, 2022, 11:12am UTC](https://forum.kx.com/t/five-easy-pieces/12410/12 "2022-03-04T11:12:00Z")

</div>

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”

&nbsp;

---

<div class="post-metadata">

**Author:** ![SJT1](https://avatars.discourse-cdn.com/v4/letter/s/eb8c5e/32.png) [@SJT1](https://forum.kx.com/u/SJT1)\
**Post date:** [March 7, 2022, 11:32am UTC](https://forum.kx.com/t/five-easy-pieces/12410/13 "2022-03-07T11:32:00Z")

</div>

Ingenious use of Prepare Text!

Maybe a simpler version of it would be `"T"sv string"dt"$.z.p`.

---

<div class="post-metadata">

**Author:** ![Rolf1](https://avatars.discourse-cdn.com/v4/letter/r/7c8e57/32.png) [@Rolf1](https://forum.kx.com/u/Rolf1)\
**Post date:** [March 7, 2022, 11:39am UTC](https://forum.kx.com/t/five-easy-pieces/12410/14 "2022-03-07T11:39:00Z")

</div>

0: gets you the dashes in the date

---

<div class="post-metadata">

**Author:** ![davidcrossey1](https://avatars.discourse-cdn.com/v4/letter/d/e68b1a/32.png) [@davidcrossey1](https://forum.kx.com/u/davidcrossey1)\
**Post date:** [March 8, 2022, 1:00am UTC](https://forum.kx.com/t/five-easy-pieces/12410/15 "2022-03-08T01:00:00Z")

</div>

I would love to know how / why this period to dash conversion is happening if anyone can shed some light?

---

<div class="post-metadata">

**Author:** ![SJT1](https://avatars.discourse-cdn.com/v4/letter/s/eb8c5e/32.png) [@SJT1](https://forum.kx.com/u/SJT1)\
**Post date:** [March 8, 2022, 11:30am UTC](https://forum.kx.com/t/five-easy-pieces/12410/16 "2022-03-08T11:30:00Z")

</div>

I speculate its because its the international standard for dates so Prepare Text uses it.

At any rate I should note in the Reference that it does so.

---

<div class="post-metadata">

**Author:** ![SJT1](https://avatars.discourse-cdn.com/v4/letter/s/eb8c5e/32.png) [@SJT1](https://forum.kx.com/u/SJT1)\
**Post date:** [March 21, 2022, 2:59pm UTC](https://forum.kx.com/t/five-easy-pieces/12410/17 "2022-03-21T14:59:00Z")

</div>

Now documented:  
https://code.kx.com/q/ref/file-text/#prepare-text
