Сделайте это:
received_time="3:00pm"
date +%I:%M%p -d "$received_time - 1 hour"
Объяснение
От date --help
:
Usage: date [OPTION]... [+FORMAT]
-d, --date=STRING display time described by STRING, not 'now'
FORMAT controls the output. Interpreted sequences are:
%I hour (01..12)
%M minute (00..59)
%p locale's equivalent of either AM or PM; blank if not known