All the user-facing functions are contained in the lib
output (or in
default.nix
, if you're not using flakes).
This does not handle timezones, because I want to keep my sanity. All the times are in UTC.
Splits the number of seconds since UNIX epoch (00:00:00 UTC on 1970-01-01) into
date
-esque parts. The first argument allows you to specify a locale (which
must contain ordered weekday names, month names, and a function to format the
datetime). The default locale is C
, provided as locales.C
, which means you
can just pass an empty attribute set as the first argument and not worry about
it.
Parts which are purely numeric (e.g. Y
(year), H
(hour), etc) are kept as
integers, so you'll have to pad them yourself (see pad). Composite
parts (e.g. T
(time)) are strings. Parts which are locale-dependent are taken
from the specified locale.
For meaning of all the parts, consult man date
.
nix-repl> with splitSecondsSinceEpoch {} __currentTime; "It's a nice ${A} out today, isn't it? What a lovely ${B} day in ${toString Y}."
"It's a nice Friday out today, isn't it? What a lovely December day in 2022."
Presents time in the ISO 8601 format, like 2009-02-13T23:31:30.000000000Z
.
nix-repl> ISO-8601 __currentTime
"2022-12-16T08:32:18.000000000Z"
Presents time in RFC 5322 (email) format, like Mon, 14 Aug 2006 02:34:56 +0000
nix-repl> RFC-5322 __currentTime
"Fri, 16 Dec 2022 10:02:38 +0000"
Presents time in RFC 3339 format, like 2006-08-14 02:34:56+00:00
nix-repl> RFC-3339 __currentTime
"2022-12-16 10:04:48+00:00"
pad
takes a padding symbol, the desired length, and the string. If the string
is shorter than the desired length, left-pads it with the padding symbol until
it is of the desired length.
pad0
is simply pad "0"
.
nix-repl> pad " " 2 4
" 4"
nix-repl> pad "0" 4 123
"0123"
nix-repl> pad0 4 123
"0123"