Connaître le jour en rapport avec une date

Résolu/Fermé
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 - 4 mars 2010 à 17:28
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 - 8 mars 2010 à 13:54
Bonjour,
je voudrais trouver un script qui me retourne le jour par rapport à une date donnée.
Exemple, aujourd'hui nous sommes le 4 mars, le résultat doit être 4 puisque c'est un jeudi.

J'utilise le code suivant mais cela fonctionne avec la fonction "date", comment y passer une variable ???
numjour= $(date +%w)

if test $numjour -eq 1
then

echo "lundi"

elif test $numjour -eq 1

echo "mardi"
fi
Mon Shell est #!/bin/ksh

Merci d'avance car je ne trouve rien du tout !
A voir également:

32 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
6 mars 2010 à 09:49
ce script n'utilise ni perl, ni date mais la commande cal, qui devrait être la même sur Solaris, essaye
$ $ cal 03 2010
     March 2010     
Su Mo Tu We Th Fr Sa
    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         
                    
$ ./day 28/2/2010
dimanche
$ ./day 6/3/2010
samedi
$ ./day 04/7/1996
jeudi
$ ./day 30/11/2003
dimanche
$ ./day 04/9/2003
jeudi
$ ./day 6/6/1944
mardi
$ 
$ cat day
#!/bin/bash

set $(echo $1 | sed -e 's+/+ +g')
cal $2 $3 |nawk -v d=$1 'BEGIN{split("dimanche lundi mardi mercredi jeudi vendredi samedi",j)}
NR>2 {sub("^0","",d) ; for(n=1;n<8;n++)if(substr($0,1+((n-1)*3),2)+0 == d)exit} ; END{print j[n]}'
$ 
3
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
4 mars 2010 à 17:49
Salut,

Pourquoi te compliquais la vie ?

date +%A

Non ? ;-))
0
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
5 mars 2010 à 00:03
Bonjour,
ben non ! Je réexplique car je ne suis peut-être pas clair.

Je voudrais trouver le jour que représente une date.
Donc pour reprendre mon exemple, si je passe la date du 4 mars, je devrais trouver jeudi.
Exemple : numjour= $($MaVariable +%w) sauf que ça ne marche pas :-(

Là vous me donner à nouveau la fonction date, mais moi je voudrais remplacer "date" par une variable qui contient une date.
D'ailleurs j'ai une seconde question pour cela, comment écrit-on dans une variable Unix une valeur au format date ? Exemple en Access c'est #2008/24/12#, en sql server c'est '2008-30-02', etc, ... mais en Unix c'est comment ?

Suis-je clair ?
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
Modifié par jipicy le 5/03/2010 à 07:32
Re-

Le "man date" t'aurait dit tout ça...
Format de date AAA/MM/JJ ou AAA-MM-JJ

date -d '2008/12/24' +'%A' 
mercredi

;-))

Édit : Format de date

$ man woman
Il n'y a pas de page de manuel pour woman.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
5 mars 2010 à 08:57
Re,
fonctionne pas, j'ai le message suivant :
Mon code :

#!/bin/ksh
clear
madate=2008/12/24
jour=`date -d '$madate' +'%A'`
echo "Num Jour ? $jour"
exit

J'ai essayé ceci également :

#!/bin/ksh
clear
madate="2008/12/24"
jour=`date -d $madate +'%A'`
echo "Num Jour ? $jour"
exit


Résulat :

date: illegal option -- d
usage: date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]

Pourtant j'ai trouvé cet argument dans une page, mais j'ai aucune idée de pourquoi ça ne fonctionne pas
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
Modifié par jipicy le 5/03/2010 à 09:20
Mets des quotes doubles autour de ta variable "$madate" et ça devrait aller mieux ;-))

Edit : Oups j'avions pas vu la fin ;-((
Quelle version de Linux ou Unix utilises-tu ?
0
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
5 mars 2010 à 09:28
Je travaille sous Unix , sauf erreur de ma part en Solaris 10 ?
Mon Shell est KSH

Je ne suis pas expert en Bash comme tu peux t'en douter, il existe une commande qui pourrait répondre plus précisément ?
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
5 mars 2010 à 09:35
Arf, effectivement on est un peu restreint sous Solaris ;-((

Une solution en Perl doit exister. faut attendre les experts pour ça, comme lami20j ou dubcek...
0
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
5 mars 2010 à 09:41
En effet 'dubcek' m'a déjà dépanné sur un autre problème de date et justement en Perl.
Comment je fais pour lui écrire directement ?
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
5 mars 2010 à 10:05
Par MP ;-))
0
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
5 mars 2010 à 10:06
lol, merci m'sieur
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
5 mars 2010 à 10:58
hello
avec strptime, on décrit le format de date que l'on a : "%Y/%m/%d"
$ date=2010/3/5
$ perl -e 'use  Time::Piece ;my $t = Time::Piece->strptime($ARGV[0],"%Y/%m/%d");print $t->strftime("%u\n")' $date
5
$ 
$ date=2010/8/7
$ perl -e 'use  Time::Piece ;my $t = Time::Piece->strptime($ARGV[0],"%Y/%m/%d");print $t->strftime("%u\n")' $date
6
$ date=2008/12/24
$ perl -e 'use  Time::Piece ;my $t = Time::Piece->strptime($ARGV[0],"%Y/%m/%d");print $t->strftime("%u\n")' $date
3
$ 
0
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
5 mars 2010 à 11:15
Salut dubceck,
merci pour ta réponse mais sans te vexer elle n'est pas en rapport avec ma question de départ :-(

Moi je cherche comment trouver une valeur qui m'indiquera que par exemple le 28/02/2010 c'est un dimanche.
Mon shell est Ksh et je travaille sous Unix solaris 10.

Est-ce que tu aurais quelque chose pour moi ?

Jadis tu m'avais envoyé le code suivant, qui fonctionne très bien et qui me retourne la date au format désiré avec x jours en plus ou en moins :
DAY=0
TODAY_YYYYMMDD=$(perl -e 'use POSIX qw(strftime); print strftime "%Y%m%d", localtime(time()+3600*24*$ARGV[0])' -- $DAY)

Tu n'aurais pas le même truc qui me retournerai : 1 pour un lundi, 2 pour un mardi MAIS avec une date fournit par variable ?

bàt
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
5 mars 2010 à 11:45
Ben avec les 2 derniers exemples de dubcek et en parsant le résultat dans un "case ... esac" avec les jours de la semaine ça devrait le faire, non ?

case $jour in
0|7)     echo "Dimanche"
;;
1)       echo Lundi
;;
etc.
0
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
5 mars 2010 à 11:58
Bon j'ai écrit ceci et j'ai le message d'erreur suivant :

date1=2010/02/28
result=$(perl -e 'use Time::Piece ;my $t = Time::Piece->strptime($ARGV[0],"%Y/%m/%d");print $t->strftime("%u\n")' $date)
echo "resultat : $result"

Messages :

Can't locate Time/Piece.pm in @INC at -e line 1.
BEGIN failed--compilation aborted at -e line 1.
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
5 mars 2010 à 12:45
je voudrais trouver un script qui me retourne le jour par rapport à une date donnée.Exemple, aujourd'hui nous sommes le 4 mars, le résultat doit être 4 puisque c'est un jeudi.
sic
Moi je cherche comment trouver une valeur qui m'indiquera que par exemple le 28/02/2010 c'est un dimanche.
$ date=28/2/2010
$ perl -e 'use  Time::Piece ;my $t = Time::Piece->strptime($ARGV[0],"%d/%m/%Y");print $t->strftime("%A\n")' $date
Sunday
$ 
0
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
5 mars 2010 à 13:41
#!/bin/ksh
clear
date=28/2/2010
result=$(perl -e 'use Time::Piece ;my $t = Time::Piece->strptime($ARGV[0],"%d/%m/%Y");print $t->strftime("%A\n")' $date)

echo "resultat : $result"

Message d'erreur :

Can't locate Time/Piece.pm in @INC at -e line 1.
BEGIN failed--compilation aborted at -e line 1.
resultat :
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
5 mars 2010 à 14:28
Solaris perl ne connait pas Time::Piiece, as-tu un compilateur C ?
$ cat date.c
#include <stdio.h>
#include <time.h>

main(int argc, char **argv)
{
	struct tm tm;
	char buf[128];

	strptime(argv[1],"%d/%m/%Y", &tm);
	strftime(buf, sizeof(buf), "%A", &tm);
	printf("%s\n", buf);
}
$ make date
cc     date.c   -o date
$ ./date 28/2/2010
Sunday
$ 
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
5 mars 2010 à 15:30
avec
perl -e 'print "@INC"'
on peut voir quelles librairies Solaris perl utilise par defaut
0
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
5 mars 2010 à 15:54
pas de compliateur C :-(((

Merci pour la version, le résultat est : /app/gnu/lib/perl5/sun4-solaris /app/gnu/lib/perl5

Je suis coincé :-/
Je vous explique ce à quoi je désire aboutir.
Chaque fin de mois nous recevons un fichier très volumineux.
La date de réception variera selon le joue oeuvré. Si le dernier jour du mois tombe entre lundi et vendredi, il me suffit de trouver cette date et le tour est joué.
Par contre, et c'est là que je suis coincé, si le dernier jour du mois tombe un dimanche, comme par exemple le 28 février 2010, nous aurions reçu le fichier le 26 car le 26 c'est le dernier jour oeuvré du mois (nous ne travaillons pas le samedi). Donc voilà pourquoi je désire connaître à quel jour correspond une date ...
Si quelqu'un a une idée, il est le bienvenu !

Merci en tout cas.
0
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
5 mars 2010 à 16:03
dubcek,
j'ai peut-être parlé trop vite, regarde le code ci-dessous. Il permet de retirer ou d'ajouter x mois à une valeur yyyymm. Ca ressemble bien à du C ça non ? Mais j'ai aucune idée comment refaire ce que tu as écrit :-/

Le fichier s'appelle 'ajouter-mois' sans extension et je l'utilise comme suit :

MOIS=201003
MOIS=`ajouter-mois ${MOIS} -1`

Le résultat sera 201002


#!/usr/bin/nawk -f

BEGIN {
Mois = ARGV[1];
Nb = ARGV[2];
Annee = int(Mois / 100);
NumMois = Mois - Annee * 100;
if(Nb > 0) {
while(Nb > 0) {
if(NumMois < 12)
NumMois++;
else {
NumMois = 1;
Annee++;
}
Nb--;
}
}
else {
while(Nb < 0) {
if(NumMois > 1)
NumMois--;
else {
NumMois = 12;
Annee--;
}
Nb++;
}
}
printf("%2.2d%2.2d\n", Annee, NumMois);
}
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
5 mars 2010 à 16:05
regarde dans /usr si il n'y a pas d'autres librairies perl
find /usr -name "perl*" -type d -ls

dans /app/gnu/ n'y a-t-il pas la commande GNU date
find /app/gnu/ -name date -ls
0
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
5 mars 2010 à 16:09
Celles à qui j'ai accès sont :
82688 1 drwxr-xr-x 7 root bin 512 Feb 5 2009 /usr/sfw/lib/webmin/perlmod
13987 1 drwxr-xr-x 7 root bin 512 Feb 5 2009 /usr/perl5
79886 1 drwxr-xr-x 3 root bin 512 Feb 5 2009 /usr/apache/perl5
79902 1 drwxr-xr-x 2 root bin 512 Feb 6 2009 /usr/apache/perl5/5.8.4/sun4-solaris/auto/Apache/include/modules/perl
77490 1 drwxr-xr-x 8 root bin 512 Feb 6 2009 /usr/apache2/lib/perl
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
5 mars 2010 à 16:10
dans /app/gnu/ n'y a-t-il pas la commande GNU date
find /app/gnu/ -name date -ls
0