Formato de fechas en bash

Cada vez que tengo que manejar una fecha en GNU/Linux sé qué comando usar, date, pero cada vez que hay que darle un formato me pasa lo mismo. ¿Cómo se hacía para que saliera...? Así que a modo de chuleta me he escrito esta entrada donde dejaré plasmado el uso del comando date, así como los formatos de salida que soporta dicho comando.
Al ejecutar date en bash se obtiene ya la salida con la fecha actual completa,
shell> date
Wed Mar 29 19:32:29 CET 2013
El problema viene cuando deseamos sacar sólo una parte de dicha fecha, el año, las horas, la zona horaria, etc. Para hacer eso hay que emplear los acondicionadores de formato que se muestran en la tabla inferior e indicarle a date que los use con un +"". Vamos a poner algún ejemplo que nos ayude a esclarecer el empleo de dichos formatos.
  • Año-Mes-Día
    shell> date +"%Y-%m-%d"
    2013-03-27
    
  • Hora:Minutos:Segundos
    shell> date +"%T"
    10:49:28
    
  • Hora en formato 12
    shell> date +"%r"
    10:36:06 AM
    
Aprovechando esta entrada, también vamos a explicar cómo obtener con el mismo comando otra fecha que no sea la actual, ya bien sea una fecha futura o una pasada. Para conseguir hacer eso, debemos de usar la opción --date='...'. Esta opción es 100% compatible con el formato de fechas explicado con antelación.
  • Día de ayer
    shell> date +"%Y-%m-%d"
    2013-03-27
    shell> date --date='-1 day' +"%Y-%m-%d"
    2013-03-26
    
  • El mes pasado
    shell> date --date='-1 month' +"%Y-%m-%d"
    2013-02-27
    
  • El año que viene
    shell> date --date='+1 year' +"%Y-%m-%d"
    2014-03-27
    
Y como nota final, queda a continuación.
Formato
Significado
%%Imprime %.
%aAbreviatura del día de la semana, respetando el idioma.
Ejemplo: Sun.
%ADía completo de la semana. Respeta el idioma.
Ejemplo: Sunday.
%bAbreviatura del mes.
Ejemplo: Jan
%BNombre del mes completo.
Ejemplo: January
%cImprime la fecha y la hora respetando el idioma.
Ejemplo: Thu Mar 3 23:05:56 2013.
%CImprime el siglo. Tiene el mismo significado que "%Y", excepto que no muestra los dos últimos dígitos.
Ejemplo: 20.
%dDía del mes.
Ejemplo: 02.
%DFecha. Mismo significado que "%m/%d/%y".
%eDía del mes. Es lo mismo que "%_d".
%FFecha completa. Es lo mismo que "%Y-%m-%d".
%gÚltimos 2 dígitos del año, respetando el formato ISO de número de semanas.
%GAño completo, respetando el formato ISO de número de semanas.
%hAbreviatura del mes.
Ejemplo: Jan
%HHora (00...23).
%IHora (01...12).
%jDía del año (001...206).
%kHora (0...23).
%lHora (1...12).
%mMes (01...12).
%MMinutos (00...59).
%nLínea en blanco
%NNanosegundos (000000000...999999999)
%pImprime el tipo de hora local. AM o PM.
Si es desconocido, no saca nada.
%PLo mismo que "%p", pero en minúsculas.
%rHora exacta en formato 12 horas.
Ejemplo: 11:11:11 AM.
%RImprime horas, en formato 24 horas y minutos. Es lo mismo que "%H:%M".
%sSegundos desde 1970-01-01 00:00:00 UTC.
%SSegundos (00...60).
%tTabulación.
%THora; lo mismo que "%H:%M:%S".
%uDía de la semana (1...7). El 1 se corresponde a Lunes.
%UNúmero de semana del año (00...53). Se consideran el Domingo primer día de la semana.
%VISO número de la semana (01...53). El Lunes es el primer día de la semana.
%wDía de la semana (0...6). El 0 es Domingo.
%WNúmero de semana del año (00...53). El Lunes es el primer día de la semana.
%xImprime la fecha de acuerdo con el formato local.
Ejemplo: 03/24/13.
%XImprime la hora en formato local.
Ejemplo: 16:15:52.
%yÚltimos dos dígitos del año (00..99).
%YAño.
%z+hhmm zona horaria.
Ejemplo: -0400.
%:z+hh:mm zona horaria.
Ejemplo: -04:00.
%::z+hh:mm:ss zona horaria.
Ejemplo: -04:00:00.
%:::zZona horaria con precisión.
Ejemplo: -04, +05:30.
%ZZona horaria en formato alfabético.
En este blog podrás encontrar una nueva página que te permite realizar la conversión entre fechas. Podrás cambiar automáticamente entre unixtime a fecha en formato legible y viceversa. Siempre que lo necesites no dudes en emplearlo.

La entrada Formato de fechas en bash la puedes leer en El mundo en bits.


5 comentarios :

  1. Muy bueno, lo uso en scripts para generar backups diarios,

    ResponderEliminar
  2. al restar un dia no me funciona desde STRQSH de iseries
    shell> date +"%Y-%m-%d"
    2013-03-27
    shell> date --date='-1 day' +"%Y-%m-%d"
    2013-03-26

    ResponderEliminar
  3. Caramba! genial! Me sirvió muchísimo para poner la fecha completa en la configuración del panel en Lubuntu porque solo viene por defecto la hora en horas y minutos. Gracias.

    %A %d/%m/%y %R

    ResponderEliminar
  4. Hola! Necesito buscar un archivo que tiene como nombre una fecha y hora específica,para hacerlo durante una conexión ftp se me ocurre restar algunos minutos a la hora, pero no funciona ya que busca la hora específica incluyendo los segundo , alguien sabe cómo especificar que se tomen en cuanta algún intervalo de segundos?

    ResponderEliminar

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios