# Five easy pieces

**URL:** <https://forum.kx.com/t/five-easy-pieces/13800>\
**Category:** Community Support\
**Tags:** imported, kdb-and-q\
**Created:** [March 2, 2022, 12:00am UTC](https://forum.kx.com/t/five-easy-pieces/13800 "2022-03-02T00:00:00Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

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

</div>

[https://learninghub.kx.com/forums/topic/five-easy-pieces](https://learninghub.kx.com/forums/topic/five-easy-pieces)

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](https://www.w3.org/TR/NOTE-datetime")? 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:** ![SJT](https://avatars.discourse-cdn.com/v4/letter/s/a587f6/32.png) [@SJT](https://forum.kx.com/u/SJT)\
**Post date:** [February 3, 2022, 12:00am UTC](https://forum.kx.com/t/five-easy-pieces/13800/2 "2022-02-03T00:00:00Z")

</div>

Doesnt get easier than that!

But the challenge is to code it in q.

---

<div class="post-metadata">

**Author:** ![SJT](https://avatars.discourse-cdn.com/v4/letter/s/a587f6/32.png) [@SJT](https://forum.kx.com/u/SJT)\
**Post date:** [March 3, 2022, 12:00am UTC](https://forum.kx.com/t/five-easy-pieces/13800/3 "2022-03-03T00:00:00Z")

</div>

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](https://code.kx.com/q/ref/cond/").

---

<div class="post-metadata">

**Author:** ![SJT](https://avatars.discourse-cdn.com/v4/letter/s/a587f6/32.png) [@SJT](https://forum.kx.com/u/SJT)\
**Post date:** [March 3, 2022, 12:00am UTC](https://forum.kx.com/t/five-easy-pieces/13800/4 "2022-03-03T00:00:00Z")

</div>

Elegant! But is the datetime type not deprecated?

---

<div class="post-metadata">

**Author:** ![SJT](https://avatars.discourse-cdn.com/v4/letter/s/a587f6/32.png) [@SJT](https://forum.kx.com/u/SJT)\
**Post date:** [March 3, 2022, 12:00am UTC](https://forum.kx.com/t/five-easy-pieces/13800/5 "2022-03-03T00:00:00Z")

</div>

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

&nbsp;

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

&nbsp;

(The [Zen monks](https://community.kx.com/t5/Community-Blogs/Meet-the-Zen-monks/ba-p/11604") wanted to play.)

---

<div class="post-metadata">

**Author:** ![SJT](https://avatars.discourse-cdn.com/v4/letter/s/a587f6/32.png) [@SJT](https://forum.kx.com/u/SJT)\
**Post date:** [July 3, 2022, 12:00am UTC](https://forum.kx.com/t/five-easy-pieces/13800/6 "2022-07-03T00:00:00Z")

</div>

Ingenious use of [Prepare Text](https://code.kx.com/q/ref/file-text/#prepare-text")!

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

---

<div class="post-metadata">

**Author:** ![SJT](https://avatars.discourse-cdn.com/v4/letter/s/a587f6/32.png) [@SJT](https://forum.kx.com/u/SJT)\
**Post date:** [August 3, 2022, 12:00am UTC](https://forum.kx.com/t/five-easy-pieces/13800/7 "2022-08-03T00:00:00Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![SJT](https://avatars.discourse-cdn.com/v4/letter/s/a587f6/32.png) [@SJT](https://forum.kx.com/u/SJT)\
**Post date:** [March 19, 2024, 10:55am UTC](https://forum.kx.com/t/five-easy-pieces/13800/8 "2024-03-19T10:55:13Z")

</div>

Now documented:  
[https://code.kx.com/q/ref/file-text/#prepare-text](https://code.kx.com/q/ref/file-text/#prepare-text")

---

<div class="post-metadata">

**Author:** ![murrmack](https://avatars.discourse-cdn.com/v4/letter/m/dc4da7/32.png) [@murrmack](https://forum.kx.com/u/murrmack)\
**Post date:** [February 3, 2022, 12:00am UTC](https://forum.kx.com/t/five-easy-pieces/13800/9 "2022-02-03T00:00: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:** ![fbodon](https://avatars.discourse-cdn.com/v4/letter/f/f0a364/32.png) [@fbodon](https://forum.kx.com/u/fbodon)\
**Post date:** [March 3, 2022, 12:00am UTC](https://forum.kx.com/t/five-easy-pieces/13800/10 "2022-03-03T00:00: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:** ![dcrossey2](https://avatars.discourse-cdn.com/v4/letter/d/c77e96/32.png) [@dcrossey2](https://forum.kx.com/u/dcrossey2)\
**Post date:** [March 3, 2022, 12:00am UTC](https://forum.kx.com/t/five-easy-pieces/13800/11 "2022-03-03T00:00:00Z")

</div>

I took a similar approach

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

&nbsp;

---

<div class="post-metadata">

**Author:** ![fbodon](https://avatars.discourse-cdn.com/v4/letter/f/f0a364/32.png) [@fbodon](https://forum.kx.com/u/fbodon)\
**Post date:** [March 3, 2022, 12:00am UTC](https://forum.kx.com/t/five-easy-pieces/13800/12 "2022-03-03T00:00:00Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![dcrossey2](https://avatars.discourse-cdn.com/v4/letter/d/c77e96/32.png) [@dcrossey2](https://forum.kx.com/u/dcrossey2)\
**Post date:** [March 3, 2022, 12:00am UTC](https://forum.kx.com/t/five-easy-pieces/13800/13 "2022-03-03T00:00:00Z")

</div>

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

.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:** ![dcrossey2](https://avatars.discourse-cdn.com/v4/letter/d/c77e96/32.png) [@dcrossey2](https://forum.kx.com/u/dcrossey2)\
**Post date:** [March 3, 2022, 12:00am UTC](https://forum.kx.com/t/five-easy-pieces/13800/14 "2022-03-03T00:00:00Z")

</div>

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

&nbsp;

&nbsp;

---

<div class="post-metadata">

**Author:** ![rolf](https://avatars.discourse-cdn.com/v4/letter/r/94ad74/32.png) [@rolf](https://forum.kx.com/u/rolf)\
**Post date:** [April 3, 2022, 12:00am UTC](https://forum.kx.com/t/five-easy-pieces/13800/15 "2022-04-03T00:00: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:** ![rolf](https://avatars.discourse-cdn.com/v4/letter/r/94ad74/32.png) [@rolf](https://forum.kx.com/u/rolf)\
**Post date:** [July 3, 2022, 12:00am UTC](https://forum.kx.com/t/five-easy-pieces/13800/16 "2022-07-03T00:00:00Z")

</div>

0: gets you the dashes in the date

---

<div class="post-metadata">

**Author:** ![dcrossey2](https://avatars.discourse-cdn.com/v4/letter/d/c77e96/32.png) [@dcrossey2](https://forum.kx.com/u/dcrossey2)\
**Post date:** [August 3, 2022, 12:00am UTC](https://forum.kx.com/t/five-easy-pieces/13800/17 "2022-08-03T00:00:00Z")

</div>

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