# Desc: Baltakatei's verbose date command
# Usage: bkdatev [args]
# Example: bkdatev --date="2001-09-11T09:02:59-04"
-# Version: 0.3.0
+# Version: 0.3.3
+# Depends: GNU Coreutils 8.32, Bash 3.2.57
# 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
# * 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`.
+# * Compatibility with macOS may be limited if any arguments
+# are provided when running `bkdatev`; e.g. passing a
+# `--date` option to `bkdatev` will fail.
yell() { echo "$0: $*" >&2; }
die() { yell "$*"; exit 111; }
# Desc: Get from 'date' the timezone UTC offset in a way
# compatible with both GNU Coreutils and BSD versions.
# Input: env var: TZ (time zone for date; e.g. 'America/Denver')
+ # args: $@ # passed onto `date`
# Depends: date (GNU Coreutils 8.32 or BSD), rev
local ntz ntz ntz_out;
local last2;
# Get numeric time zone string in way compatible with GNU Coreutils and BSD
- ntz="$(date "+%z")"; # e.g. "+0530"
+ ntz="$(date "+%z" "$@")"; # e.g. "+0530"
# Check if last two characters are trailing zeros that can be removed.
last2="${ntz:3:2}"; # assumes $ntz is 5 characters (i.e. "±HHMM")
#last2="$(rev <<< $ntz)" && last2="${last2:0:2}" && last2="$(rev <<< "$last2")";
if [[ "$last2" == "00" ]]; then
## ntz_out is truncated by 2 characters
- ntz_out="${ntz:0:-2}";
+ len_ntz="${#ntz}";
+ len_ntz_out="$(( len_ntz - 2 ))";
+ ntz_out=""${ntz:0:$len_ntz_out};
else
## ntz_out is ntz with semicolon inserted after HH
ntz_out="$(insertStr "$ntz" 3 ":" )";
# var: $fs_1
# var: $fs_2
# var: $fs_3
- # args: $@
+ # args: $@ # passed on to `date`
# env var: TZ (time zone for date; e.g. 'America/Denver')
# Output: stdout
# Depends: printf, date
s_2="$(date "$@" "$fs_1")"; # ISO-8601 without numeric timezone
s_3="$(date "$@" "$fs_2")"; # Alternate ISO-8601 expressions
s_4="$(date "$@" "$fs_3")"; # locale-specific date strings
-
+
# Append numeric timezone to $s_2 with appropriate format
# (e.g. '-07' for 'Arizona', '+05:45' for 'Asia/Kathmandu')
- s_2_tz="$(get_tz_offset)";
+ s_2_tz="$(get_tz_offset "$@")";
s_2="$( printf "%s%s" "$s_2" "$s_2_tz" )";
printf "%-10.10s %-25.25s (%-20.20s) (%s)" "$s_1" "$s_2" "$s_3" "$s_4";