Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Trying manual epoch calculations
#!/usr/bin/env bash
#
#set -x
#
_date=$1
wheelv2 () {
local d=$1
local _year _month _day _hour _minute _second epoch today days_since_epoch seconds_since_epoch
local pattern='[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]T[0-9][0-9]:[0-9][0-9]:[0-9][0-9]Z'
if ! [[ "$d" =~ $pattern ]]; then
printf '%s\n' 'Error: Unknown input date format' >&2
exit 1
fi
_year=${d:0:4}
_month=${d:5:2}
_day=${d:8:2}
_hour=${d:11:2}
_minute=${d:14:2}
_second=${d:17:2}
if [[ "$_month" -gt 2 ]]; then
_month=$((_month+1))
else
_month=$((_month+13))
_year=$((_year-1))
fi
today=$(( (_year*365) + (_year/4) - (_year/100) + (_year/400) + (_month*306001/10000) + _day ))
days_since_epoch=$(( today-719591 ))
seconds_since_epoch=$(( (days_since_epoch*86400) + (_hour*3600) + (_minute*60) + _second ))
printf '%s\n' "$seconds_since_epoch"
}
wheel_date=$(wheelv2 "$_date")
gnu_date=$(gdate -d "$_date" '+%s')
#
printf '%s: %s\n' \
"Input date is" \
"$_date"
#
printf '%s\n%s: %s\n%s: %s\n' \
"Your results are as follows" \
"GNU Date" "$gnu_date" \
"Reinvented wheel" "$wheel_date"
@jessebutryn

This comment has been minimized.

Copy link
Owner Author

jessebutryn commented Oct 23, 2019

$ ./reinvented_wheel.sh '2019-10-23T17:25:23Z'
Input date is: 2019-10-23T17:25:23Z
Your results are as follows
GNU Date: 1571851523
Reinvented wheel: 1571851523
@derobert

This comment has been minimized.

Copy link

derobert commented Oct 23, 2019

Line 21 and 24 should be +1 and -1 not ++ and -- ... after that, appears to work.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.