Cómo trabajar con fecha y hora en Bash usando el comando de fecha


El comando Date es un programa de bash externo que permite configurar o mostrar la fecha y hora del sistema. También proporciona varias opciones de formato. El comando Date está instalado en todas las distribuciones de Linux de forma predeterminada.

$ which date
$ type -a date

Escriba el comando de fecha en la terminal que mostrará la fecha y hora actuales.

$ date

Usando el comando de fecha, la fecha del sistema, la hora y la zona horaria se pueden modificar y el cambio debe sincronizarse con el reloj del hardware.

$ date --set="Thu Nov 12 13:06:59 IST 2020"
$ hwclock --systohc

Un buen lugar para obtener la lista de opciones de formato será la página de manual.

$ man date

Veamos algunas de las opciones de formato más comunes que usaremos.

  • Para aplicar formato, utilice "+ seguido de" formateador ".
  • Para obtener una lista de opciones de formato para GNU\LINUX, consulte la página de manual vinculada.
  • Para obtener una lista de opciones de formato para BSD, consulte la página de manual vinculada.

Las dos partes importantes del comando de fecha son el uso de Formato +% y la opción –date.

Ahora apliquemos algo de formato en el comando de fecha. Para aplicar formato, agregue el signo más (+) seguido de % formatter como se muestra en los ejemplos.

Veamos cómo usar formateadores relacionados con fechas en un script de shell simple llamado "date.sh".

# PRINT YEAR,MONTH,DAY AND DATE...

echo "We are in the year = $(date +%Y)"
echo "We are in the year = $(date +%y)"

# Difference between %Y and %y is %Y will print 4 digits while %y will print the last 2 digits of the year.

echo "We are in the month = $(date +%m)"
echo "We are in the month = $(date +%b)"
echo "We are in the month = $(date +%B)"

# Difference between %B and %b is, %B will print full month name while %b will print abbreviated month name.

echo "Current Day of the month = $(date +%d)"

echo "Current Day of the week = $(date +%A)"
echo "Current Day of the week = $(date +%a)"

# Difference between %A and %a is, %A will print full Weekday name while %a will print abbreviated weekday name.

# Instead of formatting to get the date, we can use %D which will print the date as %m/%d/%y or %F which prints in %Y-%M-%d format.

echo "Date using %D = $(date +%D)"
echo "Date using %F = $(date +%F)"

Veamos cómo usar formateadores relacionados con el tiempo en un script de shell simple llamado "time.sh".

# PRINT HOURS, MINS, SECONDS, NANO SECONDS

echo Hours = $(date +%H)
echo Minutes = $(date +%M)
echo Seconds = $(date +%S)
echo Nanoseconds = $(date +%N)
echo Epoch Time = $(date +%s)

echo "current time = $(date +%H:%M:%S:%N)"

# can also use %T which displays Time in HH:MM:SS format.

echo "current time in 24 hour format = $(date +%T)"

# can also use %r to display time in 12 hour format.

echo "current time in 12 hour format = $(date +%r)"

Con --date o -d , la entrada de la bandera se puede pasar como una cadena y el comando de fecha sabe manejarla inteligentemente.

Veamos algunos ejemplos para comprender cómo funciona.

# Print yesterday's date and time.
echo "Yesterday = $(date -d "Yesterday")"

# Print Tomorrow date and time.
echo "tomorrow = $(date -d "tomorrow")"

# Find what is the date and time before 10 days from now.
echo "Before 10 days = $(date -d "tomorrow -10 days")"

# Find last month and next month
echo "Last month = $(date -d "last month" "%B")"
echo "Next month = $(date -d "next month" "%B")"

# Find last year and next year
echo "Last Year = $(date -d "last year" "+%Y")"
echo "Next Year = $(date -d "next year" "+%Y")"

# Forecast the weekday
echo "2 days away from today and it comes on weekdays? = $(date -d "Today +2 days" "+%A")

Calcule el número de días entre 2 fechas determinadas.

$ echo $(( ( $(date -d "2020-11-10" "+%s") - $(date -d "2020-11-01" "+%s") ) / 86400))

Encuentra que el año dado es bisiesto o no.

$ for y in {2000..2020}; do date -d $y-02-29 &>/dev/null && echo $y is leap year; done

Asignar la salida del comando de fecha a una variable.

$ TODAY=$(date +%Y-%m-%d)
OR
$ TODAY1=$(date +%F)
$ echo $TODAY 
$ echo $TODAY1

Cree archivos de registro con la fecha agregada al nombre del archivo.

Agregar fecha y hora al crear archivos de registro, copias de seguridad o archivos de texto es una operación común que encontraremos con mayor frecuencia. Tomemos un ejemplo, para hacer una copia de seguridad, hemos creado un script de shell.

Este script tomará una copia de seguridad de las 00:00 a las 23:59 y se programará para ejecutarse diariamente a las 00:00 del día siguiente. Queremos crear archivos de registro con el formato de fecha de ayer.

CUSTOM_FORMAT=$(date --date "Yesterday" "+%d-%y-%H:%M")
LOG_FILE=/var/log/custom_application/application_${CUSTOM_FORMAT}.log
echo "Script started" >>  ${LOG_FILE}
...
CODE BLOCKS
...
echo "Script completed" >> ${LOG_FILE}

Eso es todo por este artículo. En este artículo, hemos visto cómo usar bash date y time en Linux. Háganos saber sus comentarios.