web-dev-qa-db-fra.com

Obtenir la date du numéro de la semaine

S'il vous plaît ce qui ne va pas avec mon code: 

import datetime
d = "2013-W26"
r = datetime.datetime.strptime(d, "%Y-W%W")
print(r)

Affichez "2013-01-01 00:00:00", merci.

50
Ali SAID OMAR

Un numéro de semaine ne suffit pas pour générer une date; vous avez également besoin d'un jour de la semaine. Ajouter un défaut:

import datetime
d = "2013-W26"
r = datetime.datetime.strptime(d + '-1', "%Y-W%W-%w")
print(r)

Le modèle -1 et -%w indique à l'analyseur de choisir le lundi de cette semaine. Cela génère:

2013-07-01 00:00:00

%W utilise lundi comme premier jour de la semaine. Bien que vous puissiez choisir votre propre jour de la semaine, vous pouvez obtenir des résultats inattendus si vous vous écartez de cela.

Voir les sections strftime() ET strptime() dans la documentation, note 4:

Lorsqu'ils sont utilisés avec la méthode strptime(), %U et %W ne sont utilisés que dans les calculs lorsque le jour de la semaine et l'année sont spécifiés.

Notez que si votre numéro de semaine est la date de la semaine ISO , vous voudrez utiliser %G-W%V-%u à la place! Ces directives nécessitent Python 3.6 ou plus récent.

96
Martijn Pieters
import datetime
res = datetime.datetime.strptime("2018 W30 w1", "%Y %W w%w")
print res

L'ajout de 1 comme jour de semaine donnera le début exact de la semaine en cours. L'ajout de timedelta (jours = 6) vous donnera le week-end.

datetime.datetime(2018, 7, 23)
3
Senthilkumar C

Pour compléter les autres réponses - si vous utilisez les numéros de semaine ISO, cette chaîne convient (pour obtenir le lundi d'un numéro de semaine ISO donné):

import datetime
d = '2013-W26'
datetime.datetime.strptime(d + '-1', '%G-W%V-%u')
print(r)

%G, %V, %u sont des équivalents ISO de %Y, %W, %w, ainsi ceci affiche:

2013-06-24 00:00:00

Disponible en Python 3.6+; de docs .

1
Luka Kikelj

Voici une fonction pratique incluant le problème avec zéro-semaine.

0
Ron