Fast, CLI world clock that displays time zone information using tz database to read valid tz entries.
$ twc -h -f tools/samples/tz-small.conf
America/New York 2023-12-10 16:39:43 -0500
America/Los Angeles 2023-12-10 13:39:43 -0800
UTC 2023-12-10 21:39:43 +0000
Europe/London 2023-12-10 21:39:43 +0000
Europe/Paris 2023-12-10 22:39:43 +0100
Asia/Tokyo 2023-12-11 06:39:43 +0900
Australia/Sydney 2023-12-11 08:39:43 +1100
- 🚀 Fast - 5X times faster than
date
.1 Only ≈8 ms
for one entry, and ≈177 ms
for ≈ 600 entries. - 🔒 Robust - tested to work with all tz database entries,
version 2023c
. - 📦 Self-contained - zero dependencies, ISO C99,
lightweight (
143 lines
,2980 bytes
).
Clone the repository:
git clone https://github.com/Neved4/twc
Build the sources:
$ make twc
cc twc.c -o twc
Alternatively, if you have zig
installed:
$ zig cc twc.c -t twc
twc [-h] [-f path] [-s format] [-t timezone] ...
Options:
-f path
Read config from path (default "$HOME/.config/twc/tz.conf")
-h
Print in human-readable format
-s format
Set desired time format (e.g. "%Y-%m-%d")
-t timezone
specific timezone (e.g. "Asia/Tokyo")
Examples:
Print Tokyo's date in a human-readable format with YY-MM-DD format:
$ twc -h -s %Y-%m-%d -t Asia/Tokyo
2024-01-02
Print date in Los Angeles using an environment variable for the timezone:
$ TZ=America/Los_Angeles twc
2024-01-02T15:04:05-0800
Environment:
TZ
Timezone to use when displaying dates.
XDG_CONFIG_HOME
When defined, it will be used to store the tz.conf file.
Files:
~/.config/twc/tz.conf
Stores tz database entries to be displayed.
See also:
time(3), strftime(3), environ(7)
To compile the binary inside a Docker image, run:
docker build .
Runs on Linux, macOS and *BSD systems on x86_64
and
arm64
, and compiles with zig
, clang
, gcc
, tcc
and any other
compiler that supports C99 or later.
twc
is compatible with POSIX.1-20172 as well as C233, and
it outputs ISO 86014 format.
Special thanks to everybody who helped me with pointers and memory allocation, @enigmatico and @K4rakara for her code review, and @finnoleary, for getting me started.
twc
is licensed under the terms of the MIT License.
See the LICENSE file for details.
Footnotes
-
cfr.
date
command takes ≈931 ms
when iterating over ≈ 600 entries. Measured withhyperfine
. ↩ -
IEEE Std 1003.1-2017: Standard for Information Technology — Portable Operating System Interface (POSIX®),
ISO/IEC/IEEE 9945:2009/COR 2:2017. URL: https://pubs.opengroup.org/onlinepubs/9699919799/ ↩ -
ISO/IEC 9899: Standard for Information Technology — Programming languages — C, ISO/IEC 9899:2023.
URL: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3096.pdf ↩ -
ISO 8601: Date and time — Representations for information interchange, ISO 8601-1:2019.
URL: https://www.iso.org/obp/ui/#iso:std:iso:8601:-2:ed-1:v1:en ↩