QA Graphic

Date - Unix Command Line

The Unix Date command is a very handy tool to do date displays and calculations.

The basic of displaying a date:

date

You can format the output by simply passing a few parameters:

date +"%B %d, %Y" April 05, 2017

Common Display Formats

Standard Date date +"%A, %B %d, %Y" Wednesday, April 05, 2017
Standard Time date +"%I:%M %p" 03:29 PM
MySQL Format date +"%Y-%m-%d %H:%M:%S" 2017-04-05 13:21:13
United States format date +"%m/%d/%Y" 04/05/2017
European date format date +"%d %B, %Y" 05 April, 2017
ISO 8601 date format date +"%Y-%m-%d" 2017-04-05
ISO 8601 Combined Format date +"%Y-%m-%dT%R:%S" 2017-04-05T13:3252

Find Non-Release Weeks

At my work we do release every Thursday. However, if the Thursday is within 2 days of the end of the month we skip doing a release that week.

It would be handy to know all the weeks that we will not be shipping and let people know in advance. I thought it would be a handy thing for a Bash script.

Here's a simple script that does that. This will loop through all the Thursdays in 2017 and see if it follows the business rule. If it's not a release week print out the date.

#!/bin/BASH
max=50
for (( start = 1; start <= $max; start++ )) do
# Get the Next Thursday
check=$(date -v+"$start"w -v+1d +"%e") 
check_fmt=$(date -v+"$start"w -v+1d +"%B %e, %Y")
# Get the last day of the Month
lastday=$(date -v+"$start"w -v1d -v+1m -v-1d +"%e")
# Check the number of days to the End of the Month
daystoendofmonth=$(($lastday - $check));
# Apply the 2 Day Business Rule and echo the no release weeks
if [ "$daystoendofmonth" -lt "2" ]
then
echo "Don't release on: " $check_fmt
fi
done

The above script is written to be run on a Wednesday.

When I run this script, I discovered:

  • Don't release on: June 29, 2017
  • Don't release on: August 31, 2017
  • Don't release on: November 30, 2017

Looks like we'll have a pretty quiet summer this year.