Savoir si une date est un dimanche
Résolu
dna.factory
Messages postés
25993
Date d'inscription
Statut
Modérateur
Dernière intervention
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je suis un train de réaliser un script sous unix qui programme une série de taches (un at dans un for).
ça c'est bon, j'arrive à gérer les dates, les changement des jour, de mois et d'année.
La pas de problème.
Je programme une tache par jour quelques que soit les conditions.
Ce que je souhaiterais faire (mais bon c'est facultatif) c'est rajouter une tache supplémentaires si le jour est un dimanche (comme le client est fermé, on peut mettre plus de taches sans problèmes).
Donc j'ai fais mon man date, et j'ai trouvé le %a qui me retourne le jour de la semaine.
Cool...
Sauf que je ne veux pas savoir quel jour est aujourd'hui.
Je veux savoir quel jour on sera demain, puis après demain, etc...
en fait je veux savoir quel jour on sera le 121125 ou le 121215
Est-ce qu'il y a une commande simple (en une ligne) qui permet de me retourner ça ?
J'ai en variable : $annee, $mois, $jour, $heure, $minute (chacun sur deux digits, il ne s'agit pas du timestamp courant, mais de celui que je vais utiliser pour ma commande at, dans le futur donc)
Attention, je suis sou Sco Unix, un vieux système dont la dernière mise à jour date de 2003, le bash est un peu spécifique.
Si y'a pas, ou si la commande nécessite un gros scripting, laissez tomber, c'est pas vital (sauf si ça vous amuse)
Je suis un train de réaliser un script sous unix qui programme une série de taches (un at dans un for).
ça c'est bon, j'arrive à gérer les dates, les changement des jour, de mois et d'année.
La pas de problème.
Je programme une tache par jour quelques que soit les conditions.
Ce que je souhaiterais faire (mais bon c'est facultatif) c'est rajouter une tache supplémentaires si le jour est un dimanche (comme le client est fermé, on peut mettre plus de taches sans problèmes).
Donc j'ai fais mon man date, et j'ai trouvé le %a qui me retourne le jour de la semaine.
Cool...
Sauf que je ne veux pas savoir quel jour est aujourd'hui.
Je veux savoir quel jour on sera demain, puis après demain, etc...
en fait je veux savoir quel jour on sera le 121125 ou le 121215
Est-ce qu'il y a une commande simple (en une ligne) qui permet de me retourner ça ?
J'ai en variable : $annee, $mois, $jour, $heure, $minute (chacun sur deux digits, il ne s'agit pas du timestamp courant, mais de celui que je vais utiliser pour ma commande at, dans le futur donc)
Attention, je suis sou Sco Unix, un vieux système dont la dernière mise à jour date de 2003, le bash est un peu spécifique.
Si y'a pas, ou si la commande nécessite un gros scripting, laissez tomber, c'est pas vital (sauf si ça vous amuse)
A voir également:
- Savoir si une date est un dimanche
- Comment ouvrir un fichier dat - Guide
- Formule excel si date supérieur à une autre date ✓ - Forum Excel
- Airpods 3 date de sortie - Guide
- Fonction si avec date en condition ✓ - Forum Excel
- Jm date avis - Forum Consommation & Internet
5 réponses
calculer le jour d'une date avec 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 $
hello
la commande date SCO connait ces options?
la commande date SCO connait ces options?
$ date +%a -d tomorrow Tue $ date +%a -d "now+4 days" Fri $ date +%a -d "12/25/2012" Tue
pour les deux premiers, je sais que c'est pas le cas, c'est du linux (ça a été une révolution pour nos scripteurs quand on est passé à linux)
pour le dernier, déja c'est pas dans le man, donc ça me parrait peut probable.
# date +%a -d "12/25/2012"
Usage: date [-u] [+format]
date [-u] [-t [[CC]YYMMDDhhmm[.SS] | MMDDhhmm[YY] ]
# date +%a -d 122512
Usage: date [-u] [+format]
date [-u] [-t [[CC]YYMMDDhhmm[.SS] | MMDDhhmm[YY] ]
# date +%a -d "122512"
Usage: date [-u] [+format]
date [-u] [-t [[CC]YYMMDDhhmm[.SS] | MMDDhhmm[YY] ]
Après vérification j'ai bien ce -d sur une debian (dans le man), mais pas sur du sco Unix.
merci quand même.
pour le dernier, déja c'est pas dans le man, donc ça me parrait peut probable.
# date +%a -d "12/25/2012"
Usage: date [-u] [+format]
date [-u] [-t [[CC]YYMMDDhhmm[.SS] | MMDDhhmm[YY] ]
# date +%a -d 122512
Usage: date [-u] [+format]
date [-u] [-t [[CC]YYMMDDhhmm[.SS] | MMDDhhmm[YY] ]
# date +%a -d "122512"
Usage: date [-u] [+format]
date [-u] [-t [[CC]YYMMDDhhmm[.SS] | MMDDhhmm[YY] ]
Après vérification j'ai bien ce -d sur une debian (dans le man), mais pas sur du sco Unix.
merci quand même.
options farfelue que je préfererais éviter.
stocker la date actuelle dans une variable.
Modifier la date actuelle lors du déroulement de mon script, pour pouvoir utiliser date +%a sur le now
remettre la date courante à la fin du script.
(techniquement, ça devrait marcher)
Option moins farfelue mais un peu compliquée pour la valeur ajoutée
je récupère la quantième du jour de la semaine en décimal avec %u lors du lancement du script
j'incrémente la valeur en même temps que j'incrémente le jour du mois. et quand j'arrive à +6, je fais mon cas de figure, et je le reset à 0/1
en l'écrivant comme ça, ça a pas l'air trop terrible, je garde ça dans un coin faute de mieux.
stocker la date actuelle dans une variable.
Modifier la date actuelle lors du déroulement de mon script, pour pouvoir utiliser date +%a sur le now
remettre la date courante à la fin du script.
(techniquement, ça devrait marcher)
Option moins farfelue mais un peu compliquée pour la valeur ajoutée
je récupère la quantième du jour de la semaine en décimal avec %u lors du lancement du script
j'incrémente la valeur en même temps que j'incrémente le jour du mois. et quand j'arrive à +6, je fais mon cas de figure, et je le reset à 0/1
en l'écrivant comme ça, ça a pas l'air trop terrible, je garde ça dans un coin faute de mieux.
une autre bidouille, pour savoir quel jour de la semaine on sera dans n jours.
je récupère le quantième avec %u
j'ajoute n
et je fais un modulo 7
Pas utile dans mon cas, vu que je boucle en incrémentant les jours de toute façon, et que j'ai besoin de vérifier à chaque incrémentation, donc la méthode d'au dessus est mieux.
je récupère le quantième avec %u
j'ajoute n
et je fais un modulo 7
Pas utile dans mon cas, vu que je boucle en incrémentant les jours de toute façon, et que j'ai besoin de vérifier à chaque incrémentation, donc la méthode d'au dessus est mieux.
Dubcek : merci beaucoup, mais je pense que c'est mort pour moi dans le cas présent, je pense que je vais avoir recours au scripting et je vais réinventer le fil à couper le beurre.
Par contre ça sert aux autres, et tu as largement répondu à la question, c'est pas ta faute, si je travaille sur un système qui date du siecle dernier.
Je passe en résolu car tu as donné deux bonnes réponses pour les autres
Si tu trouves d'autres idées, envoie toujours, on sait jamais.
Par contre ça sert aux autres, et tu as largement répondu à la question, c'est pas ta faute, si je travaille sur un système qui date du siecle dernier.
Je passe en résolu car tu as donné deux bonnes réponses pour les autres
Si tu trouves d'autres idées, envoie toujours, on sait jamais.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 $
le gsub sert à avoir 7 champs sur chaque ligne, pour ensuite utiliser a[n], n étant le No du champ et a contenant les jours:
$ 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 ...on pourrait aussi remplacer le gsub par:
BEGIN{FIELDWIDTHS="3 3 3 3 3 3 3"}FIELDWIDTHS est une option gawk, inconnue des vieux awk
root@LECBIARRITZ:/home/sesadm# man ncal
Reformatting ncal(1), please wait...
root@LECBIARRITZ:/home/sesadm# ncal
November 2012
Mo 5 12 19 26
Tu 6 13 20 27
We 7 14 21 28
Th 1 8 15 22 29
Fr 2 9 16 23 30
Sa 3 10 17 24
Su 4 11 18 25
Sous unix :
# man ncal
man: ncal not found
# ncal
ncal: not found
Merci quand même, je connaissais pas ncal