#!/usr/bin/env bash # Desc: Baltakatei's verbose date command # Usage: bkdatev [args] # Example: bkdatev --date="2001-09-11T09:02:59-04" # Version: 0.1.0 # Ref/Attrib: [1] "ISO 8601". Wikipedia. https://en.wikipedia.org/wiki/ISO_8601 # [2] "Changing the Locale in Wine" https://stackoverflow.com/a/16428951 # [3] "Shanghai vs Beijing" https://bugs.launchpad.net/ubuntu/+source/libgweather/+bug/228554 # Notes: * Check `ls -R /usr/share/zoneinfo` for time zone names. # * Check `cat /usr/share/i18n/SUPPORTED` for supported locales. # * For list of valid locales, see: https://manpages.ubuntu.com/manpages/bionic/man3/DateTime::Locale::Catalog.3pm.html # * Locations chosen for population, personal signifiance, and spatial coverage. # # For International Atomic Time (TAI), use offsets from UTC provided in `/usr/share/zoneinfo/leap-seconds.list`. line_sep() { # Input: var: n_ln local skip_every=4; ((n_ln++)); if ! ((n_ln % "$skip_every")); then printf "\n"; fi; return 0; }; # periodically print separating blank line print_dateline() { # Input: var: $id # var: $fs_1 # var: $fs_2 # var: $fs_3 # args: $@ # Output: stdout # Depends: printf, date # Ref/Attrib: * Truncate string in printf https://stackoverflow.com/a/46812677 local s_1 s_2 s_3 s_4; s_1="$id"; s_2="$(date "$@" "$fs_1")"; s_3="$(date "$@" "$fs_2")"; s_4="$(date "$@" "$fs_3")"; printf "%-10.10s %-25.25s (%-20.20s) (%s)" "$s_1" "$s_2" "$s_3" "$s_4"; printf "\n"; unset fs_1 fs_2 fs_3 fs_4; }; # print line of dates main() { n_ln=0; # for line_sep() # format strings fs_iso8601="+%Y-%m-%dT%H:%M:%S%:::z"; # typical ISO-8601 fs_iso8601_etc="+%G-W%V-%u, %Y-%j"; # alternate ISO-8601 dates fs_locale="+%Z; %A; %c"; # locale-specific date strings # vars for print_dateline() fs_1="$fs_iso8601"; fs_2="$fs_iso8601_etc"; fs_3="$fs_locale"; # UTC (pop. (2021): 7,837,000,000) ( export TZ=UTC; id="UTC"; fs_3="+%s seconds since 1970-01-01T00:00+00"; print_dateline "$@"; ); line_sep; # Hawaii ( export TZ=US/Hawaii; export LANG="haw-US.UTF8"; id="HAWAII"; print_dateline "$@"; ); line_sep; # Los Angeles, USA ( export TZ=America/Los_Angeles; export LANG="en_US.UTF-8"; id="LOS ANGELES"; print_dateline "$@"; ); line_sep; # Denver, USA (pop. (2021): 711,463) ( export TZ=America/Denver; export LANG="en_US.UTF-8"; id="DENVER"; print_dateline "$@"; ); line_sep; # Chicago, USA (pop. (2021): 711,463) ( export TZ=America/Chicago; export LANG="en_US.UTF-8"; id="CHICAGO"; print_dateline "$@"; ); line_sep; # Mexico City, Mexico (pop. (2018): 21,804,515) ( export TZ=America/Mexico_City; export LANG="es_MX.UTF8"; id="MEXICO CITY"; print_dateline "$@"; ); line_sep; # Panama City, Panama ( export TZ=America/Panama; export LANG="es_PA.UTF8"; id="PANAMA CITY"; print_dateline "$@"; ); line_sep; # New York, USA (pop. (2018): 20,140,470) ( export TZ=America/New_York; export LANG="en_US.UTF-8"; id="NEW YORK"; print_dateline "$@"; ); line_sep; # São Paulo, Brazil ( export TZ=America/Sao_Paulo; export LANG="pt_BR.UTF8"; id="SAO PAULO"; print_dateline "$@"; ); line_sep; # Buenos Aires ( export TZ=America/Argentina/Buenos_Aires; export LANG="es_AR.UTF8"; id="BUENOS AIRES"; print_dateline "$@"; ); line_sep; # London, England ( export TZ=Europe/London; export LANG="en_GB.UTF-8"; id="LONDON"; print_dateline "$@"; ); line_sep; # Kinshasa, Africa ( export TZ=Africa/Kinshasa; export LANG="ln_CD.UTF8"; id="KINSHASA"; print_dateline "$@"; ); line_sep; # Lagos, Africa ( export TZ=Africa/Lagos; export LANG="en_NG.UTF8"; id="LAGOS"; print_dateline "$@"; ); line_sep; # Paris, France ( export TZ=Europe/Paris; export LANG="fr_FR.UTF8"; id="PARIS"; print_dateline "$@"; ); line_sep; # Stockholm, Sweden ( export TZ=Europe/Stockholm; export LANG="sv_SE.UTF8"; id="STOCKHOLM"; print_dateline "$@"; ); line_sep; # Cairo, Egypt ( export TZ=Africa/Cairo; export LANG="ar_EG.UTF8"; id="CAIRO"; print_dateline "$@"; ); line_sep; # Athens (pop. (2020): 3,526,887) ( export TZ=Europe/Athens; export LANG="el_GR.UTF8"; id="ATHENS"; print_dateline "$@"; ); line_sep; # Istanbul (pop. (2020): 13,719,061) ( export TZ=Asia/Istanbul; export LANG="tr_TR.UTF8"; id="ISTANBUL"; print_dateline "$@"; ); line_sep; # Tehran, Iran ( export TZ=Asia/Tehran; export LANG="fa_IR.UTF8"; id="TEHRAN"; print_dateline "$@"; ); line_sep; # Moscow, Russia ( export TZ=Europe/Moscow; export LANG="ru_RU.UTF-8"; id="MOSCOW"; print_dateline "$@"; ); line_sep; # Kyiv, Ukraine (pop. (2021): 2,962,180) ( export TZ=Europe/Kyiv; export LANG="uk_UA.UTF-8"; id="KYIV"; print_dateline "$@"; ); line_sep; # Delhi, India (pop. (2018): 29,000,000) ( export TZ=Asia/Kolkata; export LANG="hi_IN.UTF-8"; id="DELHI"; print_dateline "$@"; ); line_sep; # Jakarta, Indonesia (pop. (2018): 33,430,285) ( export TZ=Asia/Jakarta; export LANG="id_ID.UTF8"; id="JAKARTA"; print_dateline "$@"; ); line_sep; # Singapore, Singapore (pop (2018): 5,792,000) ( export TZ=Asia/Singapore; export LANG="en_SG.UTF-8"; id="SINGAPORE"; print_dateline "$@"; ); line_sep; # Beijing, China (pop. (2018): 19,618,000) ( export TZ=Asia/Shanghai; # [3] export LANG="zh_CN.UTF-8"; id="BEIJING"; print_dateline "$@"; ); line_sep; # Tokyo, Japan (pop. (2018): 37,274,000) ( export TZ=Asia/Tokyo; export LANG="ja_JP.UTF8"; id="TOKYO"; print_dateline "$@"; ); line_sep; # Seoul, South Korea (pop. (2018): 25,514,000) ( export TZ=Asia/Seoul; export LANG="ko_KR.UTF8"; id="SEOUL"; print_dateline "$@"; ); line_sep; # Sydney, Australia ( export TZ=Australia/Sydney; export LANG="en_AU.UTF8"; id="SYDNEY"; print_dateline "$@"; ); line_sep; # Guam ( export TZ=Pacific/Guam; export LANG="en_GU.UTF8"; id="GUAM"; print_dateline "$@"; ); line_sep; # Auckland, New Zealand ( export TZ=Pacific/Auckland; export LANG="en_NZ.UTF8"; id="AUCKLAND"; print_dateline "$@"; ); line_sep; return 0; }; # main program main "$@";