Vous êtes ici : Accueil / Forums & ML / Forums Python / Forum général Python / date.time weeks

date.time weeks

Remonter à Forum général Python
  • date.time weeks

    Envoyé par jimux le 16 Février 2013 à 19:55
    Bonjour,

    Voici le bout de code pour l'affichage du numéro de la semaine

    time.strftime (... semain%U ...)


    Mais à l'affichage, cela m'indique la semaine 6 en lieu et place de la semaine 7 (les premiers jours de l'année sont ignorés). Dans la librairie date.time il est indiqué que le week-end = dimanche (0).

    Quelle modification dois-je apporter pour que l'affichage soit correct ?

    Cordialement.

    • Re: date.time weeks

      Envoyé par jimux le 5 Mars 2015 à 01:31

      Bonjour,

      Je n'arrive toujours pas à afficher la bonne semaine avec isocalendar ( car j'ignore tout simplement la façon de le programmer. Et comme je ne parle absolument pas l'anglais je pioche  :

      print (date.isocalendar("""2015, 1, 1""")) me renvoie un message d'erreur (date non définie!!!???)

      Et avec time.strftime cela m'affiche avec une semaine en retard : print (time.strftime ("""semaine %W""")) me donne la semaine 9 le 5 mars 2015 au lieu de la semaine 10.

      Cordialement.

       

       

       

       

    • Re: date.time weeks

      Envoyé par Larmie le 6 Octobre 2015 à 09:02

      Très utile ce topic...

    • Re: date.time weeks

      Envoyé par Larmie le 6 Octobre 2015 à 08:57

      hein??? quoi??? je dors

    • Re: date.time weeks

      Envoyé par jacko le 18 Février 2013 à 13:31
      Bonjour,

      L'affichage est correct. %U et %W comptent les semaines complètes. La semaine n° 1 est la première semaine complète de l'année, commençant un dimanche (%U) ou un lundi (%W). Tous les jours avant sont réputés appartenir à le semaine n° 0.
      Vous pouvez aussi utiliser la méthode .isocalendar(), qui considère que la semaine n° 1 est la semaine contenant le 1er jeudi de l'année. Cela semble mieux correspondre à nos calendriers habituels.

      Cordialement.

      >>> from datetime import *
      >>> d=date(2013,1,3) # 3 janvier 2013
      >>> d.isocalendar()
      (2013, 1, 4) # -> semaine = 1
      >>> d.strftime("%U %W" )
      '00 00' # -> semaine = 0
    • Re: date.time weeks

      Envoyé par jimux le 20 Février 2013 à 23:47
      Bonjour jacko et merci de ton aide,

      Le problème ne semble pas être en mesure d'être résolu. J'ai modifié les dates, celles indiquées ne donnent rien :

      from datetime import *
      d = date (2012, 12, 31) # (la semaine 1) commence le lundi
      d.isocalendar ()
      (2013, 1, 7) # semaine 2 (lundi). Les premiers jours 2013
      avant dimanche doivent être compris dans la semaine 1.
      d.strftime ("%U %W") # !!!
      '00 00' # que viennent faire ces zéros de nul part ?
      time.strftime ("%A %d %B %Y - semaine %U")


      .Je suis débutant, j'essaie de raisonner avec logique, mais les choses parfois nous dépassent. J'ai toujours une semaine de retard en ce mercredi 20 février 2013 qui apparaît en semaine 7 au lieu de 8.
      .A quoi correspond la semaine zéro !!!???.
      .L'équation est que les premiers jours de l'année sont considérés comme la semaine 1.

      http://docs.python.org/3/library/datetime.html

      windows 7 - python 3.3

      Cordialement.
    • Re: date.time weeks

      Envoyé par jacko le 22 Février 2013 à 17:11
      Bonjour,

      Avez-vous bien lu ma réponse du 18/02 ? Il y a toutes les réponses à vos questionnements.

      Il y a plusieurs façons de compter les semaines. Python vous en propose 2 :
      - façon A (strftime) : la semaine n° 1 est la première semaine complète. Les jours précédents appartiennent à la semaine n° 0 (ce qui répond à votre question "que viennent faire ces zéros de nul part ?" ).
      - façon B (isocalendar) : la semaine n° 1 est le semaine contenant le 1er jeudi.

      Je ne sais pas quelle est votre façon de compter (une 3ième, laquelle ? voir plus bas).
      -----
      En 2013 :
      - façon A : la semaine n° 1 est la semaine du 07/01/2013 au 13/01/2013.
      -> le 20/02/2013 appartient à la semaine n° 7.
      >>> date(2013,2,20).strftime("%W" )
      '07'

      - façon B : la semaine n° 1 est la semaine du 31/12/2012 au 06/01/2013.
      -> le 20/02/2013 appartient à la semaine n° 8.
      >>> date(2013,2,20).isocalendar()
      (2013, 8, 3)
      -----
      Si la façon strftime() ne vous convient pas, ne l'utilisez pas ! avec isocalendar(), le 20/2/13 est bien en semaine 8 : c'est bien ce que vous voulez.
      -----
      Peut-être votre régle est-elle :
      "la semaine n° 1 est la semaine contenant le 1er jour de l'année" (c'est ce que je crois comprendre par "L'équation est que les premiers jours de l'année sont considérés comme la semaine 1." ), alors, vous pouvez la calculer comme ceci :

      - soit QJ = le quantième du jour J qui vous intéresse (quantième = n° du jour dans l'année, de 1 à 365 (ex : 20/2/2013: QJ=51).
      - on calcule QD = le quantième du dimanche de la semaine à laquelle appartient J (c-à-d QJ + 7 - n° du jour J dans la semaine (lundi=1, mardi=2, etc.) 'ex. : pour 20/2/2013: QD=51+7-3=55).
      - le n° de la semaine selon votre règle est alors :
      S=(QD-1)/7+1
      (ex: pour 20/2/2013: (55-1)/7+1 = 8

      Je vous laisse trasncrire cela en Python. Vous aves tous les outils dans la doc du module datetime.

      A noter qu'en 2013, cette règle égale la règle "façon B". Mais ce n'est pas le cas tous les ans (2012 par ex.).

      Bonne continuation.
    • Re: date.time weeks

      Envoyé par jimux le 24 Février 2013 à 19:53
      Bonjour,

      Il est vrai que ne maîtrisant pas toutes les notions, cela forme une certaine confusion dans mon esprit. Je vais étudier cela de près...

      Merci pour votre aide.
Rendu par Ploneboard