Linux/Unix Shell Scripting - Tratamiento de fechas en script Unix

 
Vista:

Tratamiento de fechas en script Unix

Publicado por Petergarret (1 intervención) el 22/02/2006 10:52:46
Hola,

para tratar unos ficheros, necesito obtener la fecha de ayer en formato YYMMDD.

Con date '+%Y%M%D' obtengo la del dia, pero necesito dia -1 (o sea la de ayer).

No tengo mucha idea de Unix y me estoy pegando con ello. Es posible hacer lo que necesito? Me podiais ayudar?

Un saludo y muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder

RE:Tratamiento de fechas en script Unix

Publicado por David Rico (4 intervenciones) el 23/02/2006 04:07:35
Mira yo lo que haria es separar los datos de la fecha es decir:

dia=`date +%D`
mes=`date +%M`
anio=`date +%Y`

como tu quieres obtener la fecha de ayer simplemtente lo que haces es decrementar el dia de la siguiente manera:

dia=`expr $dia - 1`

Posteriormente lo puedes concatenar:

fecha="$anio/$mes/$dia"

Espero que te haya servido, hasta la proxima
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

RE:Tratamiento de fechas en script Unix

Publicado por pepon (1 intervención) el 17/03/2006 11:37:29
Entonces el dia anterior al primero de mes es el dia 99 del mes anterior!!!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tratamiento de fechas en script Unix

Publicado por Jose (1 intervención) el 25/11/2011 15:53:56
Prueba con esto:
FECHA_AYER=`TZ=GMT+23 date '+%Y%m%d'`

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tratamiento de fechas en script Unix

Publicado por Tavo (1 intervención) el 10/02/2017 18:32:58
Excelente aporte...gracias!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tratamiento de fechas en script Unix

Publicado por JUANZR (1 intervención) el 05/09/2012 22:19:12
Mi Estimado, te estas "brincando" toooodo lo que se requiere validar cuando el día es primero, posteriormente se requeriría verificar si es 1.marzo con año bisiesto ó si es día primero de enero, está excelente el dato de joab83@gmail.com,
saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tratamiento de fechas en script Unix

Publicado por Cesar (1 intervención) el 30/05/2013 18:49:05
Que pasa con los casos cuando hay cambio de mes?, el dia 1° lo reportaria como el dia 0 y el mes seria el actual
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tratamiento de fechas en script Unix

Publicado por Eduardo VIllasmil (1 intervención) el 30/05/2013 21:32:50
Para el calculo de fecha hacia atras usar la runtina siguiente (no funciiona asi adelante):


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#! /usr/bin/ksh
. ~/.profile
arcDate=`date +%Y%m%d%H%M%S`
currentday=`date +%Y%m%d`
MAIL="evillasmil@tracfone.com "
 
OFFSET=${1:-3}
 
case $OFFSET in
*[!0-9]* | ???* | 3? | 29) print -u2 "Invalid input" ; exit 1;;
esac
 
eval `date "+day=%d; month=%m; year=%Y`
typeset -Z2 day month
typeset -Z4 year

# Subtract offset from day, if it goes below one use 'cal'
# to determine the number of days in the previous month.
day=$((day - OFFSET))
if (( day <= 0 )) ;then
month=$((month - 1))
if (( month == 0 )) ;then
year=$((year - 1))
month=12
fi
set -A days `cal $month $year`
xday=${days[$(( ${#days[*]}-1 ))]}
day=$((xday + day))
fi

IN3DAYS=$year$month$day
echo $IN3DAYS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

RE:Tratamiento de fechas en script Unix

Publicado por Antonio M. (1 intervención) el 16/08/2013 09:09:28
dia=`date +%d --date='1 days ago'`
mes=`date +%m --date='1 days ago'`
anio=`date +%y --date='1 days ago'`
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lander

RE:Tratamiento de fechas en script Unix

Publicado por Lander (1 intervención) el 12/02/2015 23:22:56
Muy buena la solución, ya que dependiendo del tipo de version de unix no funciona --date.....
Por otro lado si quieren hacerlo menos complejo o por simple prueba, se puede hacer con una conexión a una base de datos , recuperando la fecha en un archivo plano......Ej.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
v_path="/HOME/estoyaqui"
CONEXION="usuario/clave@BD"
GEN_FECHA()
{
${ORACLE_HOME}/bin/sqlplus -s <<EOF>FECHA_PROCESO.DAT
${CONEXION}
Set verify off
Set pages 0
Set lines 200
Set head off
Set feedback off
Col a format 990
 
Spool '${v_path}'/ejecucion_arg.out
select lpad(to_char(sysdate-7, 'dd/mm/YYYY'), 10, 0) from dual;
Spool Off
 
EOF
 
EJECUCION_ARG=`cat ${v_path}/FECHA_PROCESO.DAT | grep '/' | awk '{print $1}' `;  export EJECUCION_ARG
 
}
 
GEN_FECHA; # llama la funcion
v_date=${EJECUCION_ARG} # asigna resultado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tratamiento de fechas en script Unix

Publicado por Gonzalo (1 intervención) el 28/02/2020 20:46:47
Pero esta soluciòn no sirve para el primer dìa del mes, de acuerdo a tu respuesta si digamos es 1ro de Marzo tus variables almacenarian así:

dia=1
mes=3
anio=2006

si decrementas solo el dìa y luego concatenas la fecha te saldra:

fecha=2006/3/0

Saludos cordiales,

Gonzalo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar