parsedate() #@ Parse various formats of date
{ #@ USAGE: parsedate ...
local string=$* datefmt dateinfo
if [[ $string == [0-9][0-9][0-9][0-9][012][0-9][0123][0-9] ]]
then
day=${year:6:2}
month=${year:4:2}
year=${year:0:4}
elif [[ $string == [0-9][0-9][0-9][0-9]?[012][0-9]?[0123][0-9]* ]]
then
read year month day time junk <<< "${string//[!0-9]/ }"
else
datefmt="+%Y~%m~%d~%H~%M~%S~%Y-%m-%d_%H:%M:%S~%Y-%m-%d~%a~%j~%w~%b~%B~%A"
dateinfo=$(date ${string:+-d "$string"} "$datefmt")
IFS=\~ read year month day hour minute second datestamp date DayOfWeek \
DayOfYear DayNum MonthAbbrev MonthName DayName <<< "$dateinfo"
fi
}