Comment savoir quel numéro de semaine est l'année en cours le 16 juin (semaine 24) avec Python?
python
datetime
week-number
Gerry
la source
la source
strftime("%U", d)
peut différer deisocalendar()
. Par exemple, si vous changez l'année en 2004, vous obtiendrez la semaine 24 en utilisantstrftime()
et la semaine 25 en utilisantisocalendar()
.Réponses:
datetime.date
a uneisocalendar()
méthode, qui retourne un tuple contenant la semaine calendaire:datetime.date.isocalendar () est une méthode d'instance renvoyant un tuple contenant l'année, le numéro de semaine et le jour de la semaine dans l'ordre respectif pour l'instance de date donnée.
la source
[1]
' ou que vous indiquiez où chercher les informations.date(2010, 1, 1).isocalendar()[1]
revient53
. De la documentation: "Par exemple, 2004 commence un jeudi, donc la première semaine de l'année ISO 2004 commence le lundi 29 décembre 2003 et se termine le dimanche 4 janvier 2004, de sorte quedate(2003, 12, 29).isocalendar() == (2004, 1, 1)
etdate(2004, 1, 4).isocalendar() == (2004, 1, 7)
."isocalendar()
est génial, mais assurez-vous que c'est ce que vous voulez. Aujourd'hui est un parfait exemple. 01/01/2016 est égal à(2015, 53, 5)
.now.strftime("%W")
etnow.strftime("%U")
sont égaux à00
ce qui est souvent ce qui est recherché. Exemples STRFTIMEVous pouvez obtenir le numéro de semaine directement à partir de datetime sous forme de chaîne.
Vous pouvez également obtenir différents "types" du numéro de semaine de l'année en changeant le
strftime
paramètre pour:Je l'ai découvert d' ici . Cela a fonctionné pour moi dans Python 2.7.6
la source
Invalid format string
à ce modèle. Leurs documents ne mentionnent pas non%V
plus.%G-%V
place de%Y-%V
.%G
est l'équivalent ISO de l'année%Y
Je crois que ça
date.isocalendar()
va être la réponse. Cet article explique les mathématiques derrière le calendrier ISO 8601. Consultez la partie date.isocalendar () de la page datetime de la documentation Python..isocalendar () renvoie un triplet avec (année, semaine, jour, semaine).
dt.isocalendar()[0]
renvoie l'année,dt.isocalendar()[1]
renvoie le numéro de la semaine,dt.isocalendar()[2]
renvoie le jour de la semaine. Aussi simple que cela puisse être.la source
Voici une autre option:
qui imprime
24
.Voir: http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior
la source
La semaine ISO suggérée par d'autres est bonne, mais elle pourrait ne pas correspondre à vos besoins. Il suppose que chaque semaine commence par un lundi, ce qui conduit à des anomalies intéressantes en début et en fin d'année.
Si vous préférez utiliser une définition qui dit que la semaine 1 est toujours du 1er janvier au 7 janvier, quel que soit le jour de la semaine, utilisez une dérivation comme celle-ci:
la source
Généralement pour obtenir le numéro de la semaine en cours (commence à partir du dimanche):
la source
Pour la valeur entière de la semaine instantanée de l'année, essayez:
la source
Il existe de nombreux systèmes de numérotation des semaines . Voici les systèmes les plus courants simplement mis avec des exemples de code:
ISO : la première semaine commence le lundi et doit contenir le 4 janvier. Le calendrier ISO est déjà implémenté en Python:
Amérique du Nord : la première semaine commence le dimanche et doit contenir le 1er janvier. Le code suivant est ma version modifiée de l'implémentation du calendrier ISO de Python pour le système nord-américain:
la source
Si vous utilisez uniquement le numéro de semaine isocalendar dans tous les domaines, les éléments suivants devraient être suffisants:
Cela récupère le deuxième membre du tuple retourné par isocalendar pour notre numéro de semaine.
Cependant, si vous allez utiliser des fonctions de date qui traitent du calendrier grégorien, l'isocalendar seul ne fonctionnera pas! Prenons l'exemple suivant:
La chaîne indique ici de renvoyer le lundi de la première semaine de 2014 comme date. Lorsque nous utilisons isocalendar pour récupérer le numéro de semaine ici, nous nous attendons à récupérer le même numéro de semaine, mais ce n'est pas le cas. Au lieu de cela, nous obtenons un nombre de semaines de 2. Pourquoi?
La semaine 1 du calendrier grégorien est la première semaine contenant un lundi. La semaine 1 dans l'isocalendar est la première semaine contenant un jeudi. La semaine partielle au début de 2014 contient un jeudi, donc c'est la semaine 1 par l'isocalendar, et faisant
date
semaine 2.Si nous voulons obtenir la semaine grégorienne, nous devrons convertir l'isocalendar en grégorien. Voici une fonction simple qui fait l'affaire.
la source
Vous pouvez essayer la directive% W comme ci-dessous:
'% W': Numéro de semaine de l'année (lundi comme premier jour de la semaine) sous forme de nombre décimal. Tous les jours d'une nouvelle année précédant le premier lundi sont considérés comme faisant partie de la semaine 0. (00, 01, ..., 53)
la source
isocalendar () renvoie des valeurs incorrectes d'année et de numéro de semaine pour certaines dates:
Comparez avec l'approche de Mark Ransom:
la source
Je résume la discussion en deux étapes:
datetime
objet.datetime
objet ou d'undate
objet pour calculer le numéro de semaine.Réchauffer
`` `python
`` ''
1ère étape
Pour générer manuellement un
datetime
objet, nous pouvons utiliserdatetime.datetime(2017,5,3)
oudatetime.datetime.now()
.Mais en réalité, nous devons généralement analyser une chaîne existante. nous pouvons utiliser une
strptime
fonction, telle que celledatetime.strptime('2017-5-3','%Y-%m-%d')
dans laquelle vous devez spécifier le format. Le détail du code de format différent peut être trouvé dans la documentation officielle .Alternativement, un moyen plus pratique consiste à utiliser le module dateparse . Des exemples sont
dateparser.parse('16 Jun 2010')
,dateparser.parse('12/2/12')
oudateparser.parse('2017-5-3')
Les deux approches ci-dessus renverront un
datetime
objet.2ème étape
Utilisez l'
datetime
objet obtenu pour appelerstrptime(format)
. Par exemple,`` `python
`` ''
Il est très difficile de décider du format à utiliser. Une meilleure façon est d'obtenir un
date
objet à appelerisocalendar()
. Par exemple,`` `python
`` ''
En réalité, vous serez plus susceptible de l'utiliser
date.isocalendar()
pour préparer un rapport hebdomadaire, en particulier pendant la saison de magasinage "Noël-Nouvel An".la source
la source
Beaucoup de réponses ont été données, mais j'aimerais y ajouter.
Si vous avez besoin que la semaine s'affiche comme un style année / semaine (ex. 1953 - semaine 53 de 2019, 2001 - semaine 1 de 2020, etc.), vous pouvez le faire:
Cela prendra l'année et la semaine en cours, et long_week_num au jour de l'écriture ce sera:
la source
date()
partir de zéro?datetime.datetime()
les instances ont une.date()
méthode pour ce travail.