S'il vous plaît, qu'est-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.
S'il vous plaît, qu'est-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.
Un numéro de semaine n'est pas suffisant pour générer une date ; il faut aussi un jour de la semaine. Ajoutez une valeur par défaut :
import datetime
d = "2013-W26"
r = datetime.datetime.strptime(d + '-1', "%Y-W%W-%w")
print(r)
El -1
y -%w
indique à l'analyseur syntaxique de choisir le lundi de cette semaine. Cela donne un résultat :
2013-07-01 00:00:00
%W
utilise le lundi comme premier jour de la semaine. Bien que vous puissiez choisir votre propre jour de la semaine, vous risquez d'obtenir des résultats inattendus si vous vous en écartez.
Voir le strftime()
y strptime()
comportement dans la documentation, note de bas de page 4 :
Lorsqu'il est utilisé avec le
strptime()
méthode,%U
y%W
ne sont utilisés dans les calculs que lorsque le jour de la semaine et l'année sont spécifiés.
Remarque : si votre numéro de semaine est un Date de la semaine ISO vous devez utiliser %G-W%V-%u
à la place ! Ces directives nécessitent Python 3.6 ou plus récent.
Dans Python 3.8, il y a la pratique datetime.date.fromisocalendar
:
>>> from datetime import date
>>> date.fromisocalendar(2020, 1, 1) # (year, week, day of week)
datetime.date(2019, 12, 30, 0, 0)
Dans les anciennes versions de Python (3.7-), le calcul peut utiliser les informations provenant de datetime.date.isocalendar
pour déterminer les semaines conformes à la norme ISO8601 :
from datetime import date, timedelta
def monday_of_calenderweek(year, week):
first = date(year, 1, 1)
base = 1 if first.isocalendar()[1] == 1 else 8
return first + timedelta(days=base - first.isocalendar()[2] + 7 * (week - 1))
Les deux travaillent également avec datetime.datetime
.
Pour compléter les autres réponses - si vous utilisez ISO cette chaîne est appropriée (pour obtenir le lundi d'un numéro de semaine ISO donné) :
import datetime
d = '2013-W26'
r = datetime.datetime.strptime(d + '-1', '%G-W%V-%u')
print(r)
%G
, %V
, %u
sont les équivalents ISO de %Y
, %W
, %w
donc cette sortie :
2013-06-24 00:00:00
Disponible en Python 3.6+ ; à partir de docs .
Si quelqu'un cherche une fonction simple qui renvoie toutes les dates des jours ouvrables (Lu-Ve) à partir d'un numéro de semaine, considérez ceci (basé sur réponse acceptée )
import datetime
def weeknum_to_dates(weeknum):
return [datetime.datetime.strptime("2021-W"+ str(weeknum) + str(x), "%Y-W%W-%w").strftime('%d.%m.%Y') for x in range(-5,0)]
weeknum_to_dates(37)
Sortie :
['17.09.2021', '16.09.2021', '15.09.2021', '14.09.2021', '13.09.2021']
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.