Perl ou shell - convertir date en semaine

wafa_o Messages postés 112 Statut Membre -  
lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
Bonjour,

Je recherche un module PERL qui me permettra de connaitre le numéro de semaine lorsque j'indique deux dates d'une même semaine.

Par exemple je lance un script pour la semaine du 08/11/2009 au 14/11/2009 et je souhaite récupèrer : semaine 45.

Est ce que vous en connaissez un ?

Merci.
Configuration: Windows Vista
Firefox 3.5.6

10 réponses

  1. lami20j
     
    Salut,

    Avec la commande date
    lami20j@debian-acer:~$ date '+%W' --date="2009/12/30"
    52
    lami20j@debian-acer:~$ date '+%W' --date="2009/11/10"
    45


    Sinon tu as le module WeekOfYear
    0
  2. wafa_o Messages postés 112 Statut Membre 2
     
    Salut lami20j,

    Merci, la commande date me convient. Par contre, comment se fait il que pour :

    date '+%W' --date="2009/11/10"
    le résultat soit 45 alors qu'il s'agit de la semaine 46 ?
    0
    1. blux Messages postés 2046 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      Salut,

      tout dépend de comment est calculée la première semaine de l'année.

      Dans certains logiciels, c'est la semaine qui comprend le 1er janvier, pour d'autres, c'est la semaine qui contient au moins 4 jours dans la nouvelle année et pour d'autres, c'est la première semaine avec 7 jours dans la nouvelle année...

      Sur Linux, le première semaine est la semaine 00 et non la semaine 01...

      Regarde le résultat de date '+%U' --date="2009/01/01"
      0
  3. lami20j
     
    Re,

    Par exemple je lance un script pour la semaine du 08/11/2009 au 14/11/2009 et je souhaite récupèrer : semaine 45.

    Tu le croyais aussi que c'est 45 ;-)))

    C'est peut être puisque pour 01 janvier c'est la semaine zéro

    ~$ date '+%W' --date="2009/01/01"
    00


    Alors il faut ajouter 1
    lami20j@debian-acer:~$ echo $(( $(date '+%W' --date="2009/11/10") + 1))
    46
    lami20j@debian-acer:~$ ^C
    lami20j@debian-acer:~$ echo $(( $(date '+%W' --date="2009/01/01") + 1))
    1
    0
  4. wafa_o Messages postés 112 Statut Membre 2
     
    Super ! Ca fonctionne.
    Bonne journée
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Ou :

    date '+%V' --date="2009/11/10"

    ;-))
    0
    1. lami20j
       
      Salut,

      Mince, je n'ai pas vu celui là ;-)
      C'est encore mieux et plus propre.
      Merci.
      0
    2. blux Messages postés 2046 Date d'inscription   Statut Modérateur Dernière intervention   3 455 > lami20j
       
      pas trouvé dans le man chez moi...
      0
    3. lami20j > blux Messages postés 2046 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Salut blux,

      Alors peut être qu'une solution portable c'est du rigueur ;-)
      0
    4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > blux Messages postés 2046 Date d'inscription   Statut Modérateur Dernière intervention  
       
             %U     nombre de semaines écoulées dans l'année si Dimanche est le pre-
                    mier jour de la semaine (00..53)
      
             %V     nombre de semaines écoulées dans l'année si Lundi est le premier
                    jour de la semaine (01..53)
      
             %w     Jour de la semaine (0..6); 0 représente Dimanche
      
             %W     nombre de semaines écoulées dans l'année si Lundi est le premier
                    jour de la semaine (00..53)
      0
    5. blux Messages postés 2046 Date d'inscription   Statut Modérateur Dernière intervention   3 455 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Et pourtant, le %V est reconnu !

      %m mois (01..12)

      %U numéro de semaine dans l'année (00..53). La semaine commence le Dimanche.

      %w Jour de la semaine (0..6). Le 0 correspond au Dimanche.

      %W numéro de semaine dans l'année (00..53). La semaine commence le Lundi.

      Red Hat Enterprise Linux AS release 4 (Nahant Update 3)
      0
  7. wafa_o Messages postés 112 Statut Membre 2
     
    Effectivement, j'ai utilisé '+%V' au lieu de '+%W' ... +1
    0
  8. wafa_o Messages postés 112 Statut Membre 2
     
    Bonjour,

    A ce sujet, j'ai une autre question svp.
    Ce que je souhaite avoir en sortie
    01 TEST

    (01 est le numéro de semaine)

    Voilà mon code :
    print FILE`date '+%V' --date="2010/01/04`;
    print FILE "TEST\n";

    Le problème c'est que j'ai un saut de ligne entre la semaine et TEST. J'obtiens :
    01
    TEST

    Comment résoudre la problème ?
    0
  9. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    $ cat date.pl
    #!/usr/bin/perl
    use strict;use warnings;
    open FILE, ">plop" or die "E/S plop : $!\n";
    chomp(my $date=qx#date '+%V' --date="2010/01/04"#);
    print FILE "$date TEST\n";
    __END__
    $ perl date.pl
    $ cat plop
    01 TEST

    0
  10. wafa_o Messages postés 112 Statut Membre 2
     
    Merci, juste une question pour ma compréhension, à quoi correspond qx ?
    0
  11. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    qx// est la même chose que les apostrophes inverses `` que je n'ai pas pus taper dans ma console ;-)
    C'est un opérateur pour capturer le résultat d'une commande système.

    Voir dans man perlop
    qx/CHAINE/

    `CHAINE`

    Une chaîne qui est (éventuellement) interpolée puis exécutée comme une commande système par /bin/sh ou équivalent. Les jokers, tubes (pipes) et redirections sont pris en compte. L'ensemble de la sortie standard de la commande est renvoyé ; la sortie d'erreur n'est pas affectée. Dans un contexte scalaire, le résultat est retourné comme une seule chaîne (potentiellement multi-lignes) ou undef si la commande échoue. Dans un contexte de liste, le résultat est une liste de lignes (selon la définition des lignes donnée par $/ ou $INPUT_RECORD_SEPARATOR) ou la liste vide si la commande échoue.
    --
    106485010510997108
    0