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 %. |
%a | Abreviatura del día de la semana, respetando el idioma. Ejemplo: Sun. |
%A | Día completo de la semana. Respeta el idioma. Ejemplo: Sunday. |
%b | Abreviatura del mes. Ejemplo: Jan |
%B | Nombre del mes completo. Ejemplo: January |
%c | Imprime la fecha y la hora respetando el idioma. Ejemplo: Thu Mar 3 23:05:56 2013. |
%C | Imprime el siglo. Tiene el mismo significado que "%Y", excepto que no muestra los dos últimos dígitos. Ejemplo: 20. |
%d | Día del mes. Ejemplo: 02. |
%D | Fecha. Mismo significado que "%m/%d/%y". |
%e | Día del mes. Es lo mismo que "%_d". |
%F | Fecha 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. |
%G | Año completo, respetando el formato ISO de número de semanas. |
%h | Abreviatura del mes. Ejemplo: Jan |
%H | Hora (00...23). |
%I | Hora (01...12). |
%j | Día del año (001...206). |
%k | Hora (0...23). |
%l | Hora (1...12). |
%m | Mes (01...12). |
%M | Minutos (00...59). |
%n | Línea en blanco |
%N | Nanosegundos (000000000...999999999) |
%p | Imprime el tipo de hora local. AM o PM. Si es desconocido, no saca nada. |
%P | Lo mismo que "%p", pero en minúsculas. |
%r | Hora exacta en formato 12 horas. Ejemplo: 11:11:11 AM. |
%R | Imprime horas, en formato 24 horas y minutos. Es lo mismo que "%H:%M". |
%s | Segundos desde 1970-01-01 00:00:00 UTC. |
%S | Segundos (00...60). |
%t | Tabulación. |
%T | Hora; lo mismo que "%H:%M:%S". |
%u | Día de la semana (1...7). El 1 se corresponde a Lunes. |
%U | Número de semana del año (00...53). Se consideran el Domingo primer día de la semana. |
%V | ISO número de la semana (01...53). El Lunes es el primer día de la semana. |
%w | Día de la semana (0...6). El 0 es Domingo. |
%W | Número de semana del año (00...53). El Lunes es el primer día de la semana. |
%x | Imprime la fecha de acuerdo con el formato local. Ejemplo: 03/24/13. |
%X | Imprime la hora en formato local. Ejemplo: 16:15:52. |
%y | Últimos dos dígitos del año (00..99). |
%Y | Añ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. |
%:::z | Zona horaria con precisión. Ejemplo: -04, +05:30. |
%Z | Zona 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.
Muy bueno, lo uso en scripts para generar backups diarios,
ResponderEliminarLA RE CONCHA DE TU MADRE BUENO FORRO
Eliminaral restar un dia no me funciona desde STRQSH de iseries
ResponderEliminarshell> date +"%Y-%m-%d"
2013-03-27
shell> date --date='-1 day' +"%Y-%m-%d"
2013-03-26
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.
ResponderEliminar%A %d/%m/%y %R
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