⌚️ Tiny world clock in C!
MIT License
twc
- Tiny world clock in C! 🛠️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
date
.[^1] Only ≈ 8 ms
for one177 ms
for ≈ 600 entries.version 2023c
.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-2017[^2] as well as C23[^3], and
it outputs ISO 8601[^4] 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.
[^1]: cfr. date
command takes ≈ 931 ms
when iterating over ≈ 600
entries. Measured with hyperfine
.
[^2]: 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/
[^3]: 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
[^4]: 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