IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Conversion et comparaison des dates en script shell


Sujet :

Shell et commandes GNU

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Par défaut Conversion et comparaison des dates en script shell
    Bonjour toute le monde.
    Jai un petit souci.

    Jai un string de la forme yyyyMMddHHmmss par exple la date du jour 20121114185013. Je souhaite convertir ce string en date puis soustraire x mois qui donne date1

    Au final le but est de pouvoir comparer date1 et date2 avec date2 la date du jour.
    chaine1 = 20121114185013
    convertir chaine1 en date = date1

    si (date1-xmois) > dateDujour)
    traitement1 ....
    sinon
    traitement2
    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Bonjour,

    regarde les pages man de cut et de date

    d'abord, tu coupes la chaîne jusqu'à obtenir des sous-chaînes, que tu pourras passer à date avec l'option -d, qui servira également pour ajouter/enlever un nombre de mois.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Attention à la spécification de la soustraction "date - x mois"!

    Si on part du 31 mars et qu'on retire 1 mois, à quelle date arrive-t-on???

    [qui a dit que je chipotais???]

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Par défaut
    merci pour vos reponses. J'ai utilisé la commande cut pour decouper la chaine
    var="20121115123926"
    annee=`echo $var | cut -c1-4`
    mois=`echo $var | cut -c5-6`
    jour=`echo $var | cut -c7-8`
    Maitenant il faut convertir en date c'est la je suis bloquée sur la commande date.
    Une idée??

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    normalement, date -d "$annee-$mois-$jour -1month" (cf.info date 'date input formats'),
    mais vu le comportement relevé par jack-ft concernant le mois de février, je ne sais plus trop...
    existe-t-il une astuce, que je n'ai pas trouvée ?
    faut-il gérer l'exception qu'impliquent les 30 et 31 mars ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    normalement, date -d "$annee-$mois-$jour -1month" (cf.info date 'date input formats'),
    mais vu le comportement relevé par jack-ft concernant le mois de février, je ne sais plus trop...
    existe-t-il une astuce, que je n'ai pas trouvée ?
    faut-il gérer l'exception qu'impliquent les 30 et 31 mars ?
    Je ne suis pas sûr de vraiment rester dans le topic shell, mais, àmha, ce n'est pas un problème d'astuce, c'est vraiment un problème de spécifications!

    Et il n'y a pas que les 30 et 31 mars qui posent problème!
    Quasiment tous les 31 de l'année (sauf août et janvier) n'ont pas de mois précédent!
    Il y a donc en tout 7 journées qui posent problème (et, 3 fois sur 4, le 29 mars).
    Tout ça, c'est dans le cas où on retire 1 mois.
    A vue de nez, on obtient autant de journées à problème (7,75) pour tout nombre impair de mois retirés (ou ajoutés).
    Toujours à vue de nez, si le nombre de mois est pair (2 4 8 ou 10), il n'en reste plus que 3,75 avec l'exception de +6 mois ou -6 mois où le le nombre de jours à problème tombe à 1,75
    Il reste l'exception ultime +12 mois ou -12 mois où le nombre de jours à problème tombe à son minimum 0,25 (les chipoteurs diraient plutôt 0,242 190 517 (en se basant sur la durée de l'année tropique (mais (c'est bien connu) je ne suis pas un chipoteur))).

    Sinon, on peut aussi choisir de retirer un nombre de jours, car tout jour possède un jour précédent et donc, par récurrence, tout jour possède un n-ème jour précédent.

    On peut même établir une simple règle de 3 du genre:
    pour retirer N mois de la date courante, je choisis de retirer int(N*365/12) jours de la date courante
    avec la conséquence que, parfois, on reste dans le même mois:
    31 janvier - 1 mois -> 1 janvier
    et parfois on saute des mois
    1 mars - 1 mois -> 30 janvier

    En tout cas, personnellement et en ce qui me concerne moi-même en personne, si on me donne des spécifications comme "retirer x mois à une date", je réponds que j'ai besoin d'un peu plus de précision pour traiter le problème, na!

Discussions similaires

  1. Pb de comparaison des dates
    Par gloglo dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 27/08/2007, 12h19
  2. comparaison des dates
    Par ghotique dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 28/06/2007, 17h16
  3. Réponses: 1
    Dernier message: 25/05/2007, 22h31
  4. comparaison des dates
    Par gloglo dans le forum Langage
    Réponses: 6
    Dernier message: 22/01/2007, 12h11
  5. [Dates] Comparaison des dates
    Par sempire dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 01/01/2006, 18h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo