1
0
Fork 0
mirror of https://github.com/notwa/rc synced 2024-11-05 05:49:02 -08:00
rc/sh/now

56 lines
1.1 KiB
Text
Raw Normal View History

#!/usr/bin/env sh
2021-07-29 00:37:35 -07:00
# YES_ZSH
# YES_BASH
# YES_DASH
2021-09-23 06:48:05 -07:00
# YES_ASH
2015-12-12 06:39:45 -08:00
2021-07-30 17:57:08 -07:00
now() { ### @-
### print a date-time (UTC) in a sortable format.
### this takes a date or file as an argument,
### else it defaults to the current time.
### ```
### $ now
### 2019-05-27_35083906
### $ now ~/sh/monitor
### 2017-03-14_82387259
### $ now '@1234567890'
### 2009-02-13_84690000
### ```
2021-07-29 00:37:35 -07:00
[ $# -le 1 ] || { printf "%s\n" "$0: too many arguments" >&2; return 1; }
2021-09-23 06:48:05 -07:00
local dt= fmt='+%F_%T_%N'
2015-12-12 06:39:45 -08:00
if [ -z "$1" ]; then
dt="$(date -u "$fmt")"
2015-12-12 06:39:45 -08:00
elif [ -e "$1" ]; then
dt="$(date -u -r "$1" "$fmt")"
2015-12-12 06:39:45 -08:00
else
dt="$(date -u -d "$1" "$fmt")"
2015-12-12 06:39:45 -08:00
fi
2021-09-23 06:48:05 -07:00
local F= T= N=
2015-12-12 06:39:45 -08:00
F=${dt%%_*}
T=${dt#*_}
T=${T%_*}
N=${dt##*_}
2021-09-23 06:48:05 -07:00
local H= M= S=
2015-12-12 06:39:45 -08:00
H=${T%%:*}
M=${T#*:}
M=${M%:*}
S=${T##*:}
# don't interpret numbers as octal
F=${F#0*}
T=${T#0*}
N=${N#0*}
H=${H#0*}
M=${M#0*}
S=${S#0*}
2021-09-23 06:48:05 -07:00
local ms=
ms=$(( (H*60*60+M*60+S)*1000+N/1000000 ))
2015-12-12 06:39:45 -08:00
ms=$(printf '%08i' $ms)
echo "${F}_${ms}"
}
[ -n "${preload+-}" ] || now "$@"