Saber si una fecha es un domingo
Resuelto
dna.factory
Mensajes publicados
19917
Fecha de registro
Estado
Moderador
Última intervención
-
dubcek Mensajes publicados 18627 Fecha de registro Estado Colaborador Última intervención -
dubcek Mensajes publicados 18627 Fecha de registro Estado Colaborador Última intervención -
Bonjour,
Estoy en medio de la realización de un script en unix que programa una serie de tareas (un at en un for).
Eso está bien, logro manejar las fechas, los cambios de día, mes y año.
No hay problema.
Programo una tarea por día, sin importar las condiciones.
Lo que me gustaría hacer (aunque es facultativo) es añadir una tarea adicional si el día es domingo (como el cliente está cerrado, podemos poner más tareas sin problemas).
Así que he hecho mi man date, y encontré el %a que me devuelve el día de la semana.
Genial...
Excepto que no quiero saber qué día es hoy.
Quiero saber qué día será mañana, pasado mañana, etc...
En realidad, quiero saber qué día será el 121125 o el 121215.
¿Hay algún comando simple (en una línea) que me permita obtener eso?
Tengo en variables: $año, $mes, $día, $hora, $minuto (cada uno con dos dígitos, no se trata de la marca de tiempo actual, sino de la que voy a utilizar para mi comando at, en el futuro, por lo tanto)
Atención, estoy en Sco Unix, un viejo sistema cuya última actualización data de 2003, el bash es un poco específico.
Si no hay, o si el comando requiere un scripting complicado, olvídalo, no es vital (a menos que te divierta)
Configuración: Anthill inside
Sco/unix 5.07 /bin/sh
--
¡Deja de fallar en la prueba de Turing!
Estoy en medio de la realización de un script en unix que programa una serie de tareas (un at en un for).
Eso está bien, logro manejar las fechas, los cambios de día, mes y año.
No hay problema.
Programo una tarea por día, sin importar las condiciones.
Lo que me gustaría hacer (aunque es facultativo) es añadir una tarea adicional si el día es domingo (como el cliente está cerrado, podemos poner más tareas sin problemas).
Así que he hecho mi man date, y encontré el %a que me devuelve el día de la semana.
Genial...
Excepto que no quiero saber qué día es hoy.
Quiero saber qué día será mañana, pasado mañana, etc...
En realidad, quiero saber qué día será el 121125 o el 121215.
¿Hay algún comando simple (en una línea) que me permita obtener eso?
Tengo en variables: $año, $mes, $día, $hora, $minuto (cada uno con dos dígitos, no se trata de la marca de tiempo actual, sino de la que voy a utilizar para mi comando at, en el futuro, por lo tanto)
Atención, estoy en Sco Unix, un viejo sistema cuya última actualización data de 2003, el bash es un poco específico.
Si no hay, o si el comando requiere un scripting complicado, olvídalo, no es vital (a menos que te divierta)
Configuración: Anthill inside
Sco/unix 5.07 /bin/sh
--
¡Deja de fallar en la prueba de Turing!
5 respuestas
-
calculer el día de una fecha con ncal
$ set 25 12 2012 ; ncal $2 $3 | awk -v d=$1 '{for(n=2; n<=NF;n++)if($n == d){print $1; exit }}' Tu $ set 14 11 2012 ; ncal $2 $3 | awk -v d=$1 '{for(n=2; n<=NF;n++)if($n == d){print $1; exit }}' We $ set 25 12 2012 ; ncal $2 $3 | awk -v d=$1 '{for(n=2; n<=NF;n++)if($n == d){print $1; exit }}' Tu $ set 6 1 2013 ; ncal $2 $3 | awk -v d=$1 '{for(n=2; n<=NF;n++)if($n == d){print $1; exit }}' Su $-
bajo debian (pero no me sirve, lo necesito en unix):
root@LECBIARRITZ:/home/sesadm# man ncal
Reformateando ncal(1), por favor espere...
root@LECBIARRITZ:/home/sesadm# ncal
Noviembre 2012
Lu 5 12 19 26
Ma 6 13 20 27
Mi 7 14 21 28
Ju 1 8 15 22 29
Vi 2 9 16 23 30
Sa 3 10 17 24
Do 4 11 18 25
En unix:
# man ncal
man: ncal no encontrado
# ncal
ncal: no encontrado
Gracias de todos modos, no conocía ncal
-
-
hola
¿conoce la orden date de SCO estas opciones?$ date +%a -d tomorrow Tue $ date +%a -d "now+4 days" Fri $ date +%a -d "12/25/2012" Tue
-
Para los dos primeros, sé que no es así, es Linux (fue una revolución para nuestros redactores cuando pasamos a Linux)
para el último, ya no está en el man, así que me parece poco probable.
# date +%a -d "12/25/2012"
Uso: date [-u] [+formato]
date [-u] [-t [[CC]YYMMDDhhmm[.SS] | MMDDhhmm[YY] ]
# date +%a -d 122512
Uso: date [-u] [+formato]
date [-u] [-t [[CC]YYMMDDhhmm[.SS] | MMDDhhmm[YY] ]
# date +%a -d "122512"
Uso: date [-u] [+formato]
date [-u] [-t [[CC]YYMMDDhhmm[.SS] | MMDDhhmm[YY] ]
Después de verificar, tengo bien ese -d en una Debian (en el man), pero no en SCO Unix.
Gracias de todos modos.
-
-
opciones extravagantes que preferiría evitar.
almacenar la fecha actual en una variable.
Modificar la fecha actual durante la ejecución de mi script, para poder utilizar date +%a sobre el now
restablecer la fecha actual al final del script.
(técnicamente, eso debería funcionar)
Opción menos extravagante pero un poco complicada para el valor agregado
obtengo el dígito del día de la semana en decimal con %u al iniciar el script
incremento el valor al mismo tiempo que incremento el día del mes. y cuando llego a +6, hago mi caso y lo restablezco a 0/1
escribiéndolo así, no parece tan terrible, lo guardo en un rincón por falta de algo mejor.
--
¡Deja de fallar en la prueba de Turing! -
Dubcek: muchas gracias, pero creo que estoy perdido en este caso. Pienso que voy a recurrir a la programación y voy a reinventar la rueda.
Sin embargo, esto ayuda a los demás, y has respondido ampliamente a la pregunta; no es tu culpa que esté trabajando en un sistema que es del siglo pasado.
Marcaré como resuelto porque has dado dos buenas respuestas para los demás.
Si encuentras otras ideas, mándalas siempre, nunca se sabe.
--
¡Deja de fallar en la prueba de Turing! -
avec cal
$ set 1 1 2013 ; cal $2 $3 | awk -v d=$1 '/^ / {gsub(""", "xx ")} NR==2 {split($0,a);next} {for(n=1; n<=NF;n++)if($n == d){print a[n]; exit }}' Tu $-
-
-
gsub se utiliza para tener 7 campos en cada línea, para luego usar a[n], siendo n el número del campo y a conteniendo los días:
$ cal 12 2012| awk '/^ / {gsub(" ", "xx ")} {print}' xx December 2012 Su Mo Tu We Th Fr Sa xx xx xx xx xx xx 1 2 3 4 5 6 7 8 ...también podríamos reemplazar gsub por:BEGIN{FIELDWIDTHS="3 3 3 3 3 3 3"}FIELDWIDTHS es una opción de gawk, desconocida en los viejos awk.
-