I’d been assigned a task to do some log analysis via AWS and didn’t want to have to use the AWS UI every time I needed to do the analysis as it would be a recurring task for a few days.
I wrote the below snippet to allow for quick variable substitution each time I needed to grab these logs – setting them to appropriate UTC time but visually appealing since all email communication around time ranges was in EST.
Hope this may help someone out in the future as I was very particular that I wanted to use built in bash functionality instead of installing commands/libraries to accomplish this task for portability.

function generateEpochString()
{
TIME_TO_CONVERT="$1"
#We use >&2 to prevent messing the return value of the function up
#This allows us to print the echo statements to stderr and final return value to stdout
#See more - https://superuser.com/a/1320694/233708
#Begin conversion of time to UTC
echo "Converting $TIME_TO_CONVERT to UTC..." >&2
#Convert Local Timezone String to UTC
VARIABLE_TIME_UTC_STRING=$(date -u -d "$TIME_TO_CONVERT")
echo "$TIME_TO_CONVERT converted to UTC is $VARIABLE_TIME_UTC_STRING ..." >&2
#Convert Local Timezone String to UTC Epoch
echo "Converting $TIME_TO_CONVERT to UTC Epoch..." >&2
VARIABLE_TIME_UTC_EPOCH=$(date -u -d "$TIME_TO_CONVERT" +"%s")
echo "$TIME_TO_CONVERT converted to UTC Epoch is $VARIABLE_TIME_UTC_EPOCH ..." >&2
echo "$VARIABLE_TIME_UTC_EPOCH"
}
function generateLocalTimezoneString()
{
VARIABLE_MONTH="$1"
VARIABLE_DAY="$2"
VARIABLE_YEAR="$3"
VARIABLE_TIME="$4"
VARIABLE_TIMEZONE="$5"
VARIABLE_LOCAL_TIMEZONE_STRING="$VARIABLE_MONTH/$VARIABLE_DAY/$VARIABLE_YEAR $VARIABLE_TIME $VARIABLE_TIMEZONE"
echo "$VARIABLE_LOCAL_TIMEZONE_STRING"
}
function main()
{
#Declare variables for Start Time in Local Timezone
VARIABLE_START_MONTH="06"
VARIABLE_START_DAY="30"
VARIABLE_START_YEAR="2021"
VARIABLE_START_TIME="10:21:22"
VARIABLE_START_TIMEZONE="EST"
VARIABLE_START_TIME_EST_STRING=$(generateLocalTimezoneString "$VARIABLE_START_MONTH" "$VARIABLE_START_DAY" "$VARIABLE_START_YEAR" "$VARIABLE_START_TIME" "$VARIABLE_START_TIMEZONE")
VARIABLE_START_TIME_UTC_EPOCH=$(generateEpochString "$VARIABLE_START_TIME_EST_STRING")
#Declare variables for End Time in Local Timezone
VARIABLE_END_MONTH="06"
VARIABLE_END_DAY="30"
VARIABLE_END_YEAR="2021"
VARIABLE_END_TIME="13:21:22"
VARIABLE_END_TIMEZONE="EST"
VARIABLE_END_TIME_EST_STRING=$(generateLocalTimezoneString "$VARIABLE_END_MONTH" "$VARIABLE_END_DAY" "$VARIABLE_END_YEAR" "$VARIABLE_END_TIME" "$VARIABLE_END_TIMEZONE")
VARIABLE_END_TIME_UTC_EPOCH=$(generateEpochString "$VARIABLE_END_TIME_EST_STRING")
#Confirm the Variables before Execution
echo "AWS Log Request - Start Time - Local Time - $VARIABLE_START_TIME_EST_STRING"
echo "AWS Log Request - Start Time - Epoch UTC Time - $VARIABLE_START_TIME_UTC_EPOCH"
echo "AWS Log Request - End Time - Local Time - $VARIABLE_END_TIME_EST_STRING"
echo "AWS Log Request - End Time - Epoch UTC Time - $VARIABLE_END_TIME_UTC_EPOCH"
#Pull the Logs - Example Usage
aws logs start-query --log-group-name /aws/batch/job --start-time "$VARIABLE_START_TIME_UTC_EPOCH" --end-time "$VARIABLE_END_TIME_UTC_EPOCH" --query-string 'fields @message | limit 10'
}
main