Calcul de date (j+1) a partir d'une variable
Fermé
Jip06
Messages postés
7
Date d'inscription
mardi 29 août 2006
Statut
Membre
Dernière intervention
5 février 2007
-
29 août 2006 à 12:11
Super Sheep - 7 sept. 2009 à 15:54
Super Sheep - 7 sept. 2009 à 15:54
A voir également:
- Calcul de date (j+1) a partir d'une variable
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Calcul moyenne excel - Guide
- Comment faire une recherche à partir d'une photo - Guide
7 réponses
ATTENTION !
Pour avoir utilisé le code de lami20j, dans un script, un bug très subtile s'est glissé :
En effet, comme le décalage horaire n'est pas géré, ce script n'incrémentera jamais le jour du passage à l'heure d'hiver, car 26/10/2008 00:00:00 + 24 heures = 26/10/2008 23:00:00 !
Solution simple puisque les heures ne sont pas gérées ici : Ajouter 25h au lieu de 24h à l'intervalle de temps.
Voilà, si ça peut servir à l'internaute qui passera par là ;)
Pour avoir utilisé le code de lami20j, dans un script, un bug très subtile s'est glissé :
En effet, comme le décalage horaire n'est pas géré, ce script n'incrémentera jamais le jour du passage à l'heure d'hiver, car 26/10/2008 00:00:00 + 24 heures = 26/10/2008 23:00:00 !
Solution simple puisque les heures ne sont pas gérées ici : Ajouter 25h au lieu de 24h à l'intervalle de temps.
Voilà, si ça peut servir à l'internaute qui passera par là ;)
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
1 sept. 2006 à 23:10
1 sept. 2006 à 23:10
Salut,
voilà un petit code en Perl
La méthode utilisé est de ajouter de secondes EPOCH
- d'abord je converti en secondes EPOCH la date qui se trouve dans la variable
- je fait les manipulations nécessaires
- je permet la saisie d'un nombre de jours de decalage
- je calcule la nouvelle date en secondes EPOCH
- je converti en date
A toi d'adapter.
lami20j
voilà un petit code en Perl
La méthode utilisé est de ajouter de secondes EPOCH
- d'abord je converti en secondes EPOCH la date qui se trouve dans la variable
- je fait les manipulations nécessaires
- je permet la saisie d'un nombre de jours de decalage
- je calcule la nouvelle date en secondes EPOCH
- je converti en date
A toi d'adapter.
#!/usr/bin/perl # use warnings;use strict; use Time::Local; # la date ( aammjj ) contenu dans une variable scalaire my $d='060824'; my ($a,$m,$j) = unpack("A2" x (length($d)/2), $d); print "La date initiale : $a$m$j\n"; # conversion en secondes EPOCH my $ed = timelocal(0,0,0,$j,$m - 1,$a); # Ajout d'un nombre de jours print "Entrez le decalage [nombre jours] : "; chomp(my $decalage = <STDIN>); my $intervalle = $decalage * 60 * 60 * 24; # calculer la nouvelle date my $resultat = $ed + $intervalle; # conversion de secondes EPOCH en date format aammjj my ($jj,$mm,$aa) = (localtime($resultat))[3,4,5]; $jj = sprintf("%02d",$jj); $mm = sprintf("%02d",$mm + 1); $aa = substr(($aa + 1900),-2); my $d_res = "$d + $decalage : $aa$mm$jj"; print "$d_res\n"; __END__Une autre méthode pourra être l'utilisation du moduel Date::Calc du CPAN.
lami20j
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
29 août 2006 à 14:44
29 août 2006 à 14:44
Salut,
Je suis pas sûr d'avoir tout bien saisi là !!!
Si c'est ça que tu veux (enfin, quelque chose d'approchant) :
;-))
Je suis pas sûr d'avoir tout bien saisi là !!!
Si c'est ça que tu veux (enfin, quelque chose d'approchant) :
[jp@MDK tmpfs] $ A=23 [jp@MDK tmpfs] $ B=$(expr $A + 1) [jp@MDK tmpfs] $ echo $B 24 [jp@MDK tmpfs] $Je ne pense pas que ça puisse s'adapter à ce que tu veux faire...
;-))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
29 août 2006 à 15:07
29 août 2006 à 15:07
Re-
Juste pour ta mise en forme un peu longuette, essaie ça :
Juste pour ta mise en forme un peu longuette, essaie ça :
date "+%y%m%d" --date='1day';-))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Jip06
Messages postés
7
Date d'inscription
mardi 29 août 2006
Statut
Membre
Dernière intervention
5 février 2007
29 août 2006 à 15:30
29 août 2006 à 15:30
Ben en fait, si j'ai une variable $1 contenant la valeur '20060831' par exemple, je voudrais, en ajoutant 1 jour obtenir la valeur '20060901' .
Il faudrait que je puisse convertir ma variable en date, ajouter 1 au jour et récupérer le résultat.
suis-je plus clair !!!
merci
Il faudrait que je puisse convertir ma variable en date, ajouter 1 au jour et récupérer le résultat.
suis-je plus clair !!!
merci
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
1 sept. 2006 à 14:51
1 sept. 2006 à 14:51
shell KSH, jour+1 à partir d'une variable
[81.255.193.xxx - smtp.organic.fr] Ajouté par Jip06
2006-09-01 12:31:55 (GMT+2)
Statut : En cours
Bonjour,
je sais, j'ai déjà posté un message à ce sujet mais je n'ai pas eu de réponse satisfaisante. Pourtant ce n'est tout de m^me pas la lune que je veux attraper.
En KSH, comment puis-je ajouter un jour à partir d'une date issu d'un paramètre saisi (string).
Par exemple dans le script:
datesaisi=$1 # on recupère 060831
# je voudrais faire +1 dans le jour et récuperer 060901
# il faut donc que je puisse convertir le format string en format date et faire + 1 au jour mais en KSH, à priori, je ne peux faire +1 sur le jour que dans la fonction date et la fonction date n'accepte pas de constante ('060831').
Dois-je utiliser un autre langage (comme PERL) pour arriver à mes fins ? Et comment puis-je faire ?
Merci de votre aide, conseils, etc ...
[81.255.193.xxx - smtp.organic.fr] Ajouté par Jip06
2006-09-01 12:31:55 (GMT+2)
Statut : En cours
Bonjour,
je sais, j'ai déjà posté un message à ce sujet mais je n'ai pas eu de réponse satisfaisante. Pourtant ce n'est tout de m^me pas la lune que je veux attraper.
En KSH, comment puis-je ajouter un jour à partir d'une date issu d'un paramètre saisi (string).
Par exemple dans le script:
datesaisi=$1 # on recupère 060831
# je voudrais faire +1 dans le jour et récuperer 060901
# il faut donc que je puisse convertir le format string en format date et faire + 1 au jour mais en KSH, à priori, je ne peux faire +1 sur le jour que dans la fonction date et la fonction date n'accepte pas de constante ('060831').
Dois-je utiliser un autre langage (comme PERL) pour arriver à mes fins ? Et comment puis-je faire ?
Merci de votre aide, conseils, etc ...