hackbyte icon

shellworldclock

hackbyte | PRO | 09/18/21 10:10:40 PM UTC (Edited) | 0 ⭐ | 587 👁️ | Never ⏰ | []
Bash |

3.25 KB

|

None

|

0 👍

/

0 👎

#!/bin/bash
 
################################################################################
########## ShellWorldClock - stuff the world does not need
########## by default shows a list of date outputs according to
########## different timezones..... .. you can specify the list of zones as
########## parameters to it ... the first one should probably your local one. ;)
##########
##########
########## 2018-01-12 by hackbyte, do whatever you want with it. ;)
########## 2018-01-21 by hackbyte, little bit of cleanup and inline documentation ;)
########## 2018-01-21 by hackbyte, added Pacific/Auckland (it's Rocket Labs launchpad in new zealand)
########## 2018-07-07 by hackbyte, removed mysteriously disappeared %q, shortened output anyway. You can reverse it as you ##########                         like......
################################################################################
 
 
# getting the actual time and date to have consistent conversion times later
THISDATE=$(LC_TIME=C date --utc)
 
# Were using these timezones, put your local timezone as first one! ;)
TIMEZONES="Europe/Berlin Universal America/Cayenne US/Central US/Eastern EST US/Pacific Asia/Almaty Asia/Kolkata Asia/Tokyo Pacific/Auckland"
 
# we show this output for each timezone
# default up to 2018-07-07 ## somehow %q disappeared and well, the rest was unnecessary anyways.. 8)
# DATEFORMAT="%_4Z %_3::z %F %T (%B %A Q:%q W:%U D:%j)"
# Shortened variant:
DATEFORMAT="%_4Z %_3::z %F %T (%B %A)"
 
# The first timezone in the list is per definition our local timezone ;)
LOCALTZ=$(echo $TIMEZONES | awk '{print $1}')
 
################################################################################
########## Anything you can configure is above, usually no one needs to 
########## do any maintenance below ...
##########
########## in other words, no user serviceable parts below
##########
########## eniweh, feel free to hack as you like... ;)
################################################################################
 
################################################################################
# This just repeatedly calls date with the timezone setting in the list for/with each entry
function displayclocks {
 while [ -n "$*" ] ; do # As long as $1 is not empty/zero
  printf "%17s" $1
  TZ="$1" date --date="$THISDATE" +"$DATEFORMAT" # set TZ to the correct value and then call date
  if [ "$1" = "$LOCALTZ" ] ; then echo ; fi # if we are at the local timezione, just print an empty line
  shift # remove the first parameter from the list, shorting it down by one
 done # and repeat ;)
}
 
################################################################################
## here we go with the main functionality
if [ -z "$*" ] ; then # if we have no cmdline parameters
 displayclocks $TIMEZONES # call displayclocks with our internal default list
 exit # and out
else # or
 TIMEZONES="" # empty the timezones variable
 while [ -n "$1" ] ; do # while we have more parameters
  TIMEZONES="${TIMEZONES} ${1}" #> append the actual value to the variable with a trailing space
  shift # shift the parameter list once
 done # and repeat
 displayclocks $TIMEZONES # finally, call the displayclocks with the new list
fi
exit # Houston! Mission accomplished. ;)

Comments