2012-06-21 35 views
18

Tengo una cadena con el formato "aaaammdd". Es una cadena en bash y quiero convertirla en una fecha para que todas las demás funciones de fecha puedan usarse en ella.Convertir cadenas a la fecha en bash

"20121212" cadena en "20121212" fecha con el formato "% Y% m% d".

+1

fiesta no tiene un tipo de fecha. ¿De qué están hablando estas "otras funciones de fecha"? – Thomas

+1

Supongamos que deseo agregar 7 días a una fecha. Creo que se puede hacer en bash. No es una simple suma entera en absoluto. –

+0

Posible duplicado de [Parse Date in Bash] (http://stackoverflow.com/questions/1842634/parse-date-in-bash) –

Respuesta

23

Esto funcionó para mí:

date -d '20121212 7 days' 
date -d '12-DEC-2012 7 days' 
date -d '2012-12-12 7 days' 
date -d '2012-12-12 4:10:10PM 7 days' 
date -d '2012-12-12 16:10:55 7 days' 

continuación, puede dar formato a la salida añadiendo el parámetro '+% Y% m% d'

+0

¿Se puede convertir la compatibilidad de fecha desde ISO-8601 – CMCDragonkai

+0

@CMCDragonkai 'now = $ (date - Im) 'almacena la hora actual como una fecha/hora ISO-8601 a precisión de minutos, y' date -d = $ now' está contento con ese formato. Aunque no estoy seguro si lo mismo es necesariamente cierto para todas las variantes que son compatibles con ISO-8601. – mc0e

+0

Esto es ciertamente útil, y la fecha gnu también hace cosas como la conversión de zonas horarias, pero hay muchas otras tareas de manipulación de fechas que uno podría desear. P.ej. Diferencia entre fechas para obtener un intervalo; Redondeo de fechas e intervalos con una precisión determinada (redondear hacia abajo, redondear hacia arriba y redondear al más cercano), o ampliar más, ¿cómo puedo encontrar la fecha en 10 días hábiles a partir de la fecha X (teniendo en cuenta las vacaciones de un país determinado) . ¿Hay una herramienta más completa adecuada para el uso de scripting? – mc0e

1

simplemente use la opción -d del comando de fecha, p.

date -d '20121212' +'%Y %m' 
4

Podemos usar la fecha -d opción

1) Cambiar el formato al formato "% Y-% m-% d", es decir, 20121212 a 2012-12-12

date -d '20121212' +'%Y-%m-%d' 

2) Obtenga el día siguiente o último de una fecha determinada = 20121212. Como obtener una fecha de 7 días en el pasado con formato específico

date -d '20121212 -7 days' +'%Y-%m-%d' 

3) Si nos estamos fecha en alguna variable decir dat fecha

dat2=$(date -d "$dat -1 days" +'%Y%m%d') 
+0

estaba buscando exactamente la solución número 3, gracias @minhas23 –

2

sólo funcionan con la fecha de GNU (por lo general viene con Linux)

para OS X, dos opciones:

  1. comando de cambio (verificado)

    #!/bin/sh 
    #DATE=20090801204150 
    #date -jf "%Y%m%d%H%M%S" $DATE "+date \"%A,%_d %B %Y %H:%M:%S\"" 
    date "Saturday, 1 August 2009 20:41:50" 
    

    http://www.unix.com/shell-programming-and-scripting/116310-date-conversion.html

  2. descargar las utilidades GNU Coreutils - utilidades principales de GNU (sin verificar) http://www.unix.com/emergency-unix-and-linux-support/199565-convert-string-date-add-1-a.html