J'essaie de générer une chaîne de numéro de semaine en utilisant le module Python time , considérant que la semaine commence le dimanche .
Si mon interprétation de la documentation est correcte alors cela peut être réalisé par le code suivant:
import time #Year time.localtime()[0] >> 2019 #Month time.localtime()[1] >> 9 #Day time.localtime()[2] >> 18
Ma question est la suivante: la sortie ci-dessus est-elle correcte? La sortie ne devrait pas être 38 à la place, compte tenu des détails ci-dessous:
Mon fuseau horaire est IST (GMT + 5: 30)
import time time.strftime("%U", time.localtime()) >> 37
3 Réponses :
Oui, la sortie est correcte. La semaine 1 a commencé le 6 janvier, car c'était le premier dimanche de 2019. Du 1er au 5 janvier étaient la semaine 0:
>>> time.strftime("%V", time.localtime()) '38' >>> from datetime import date >>> date.today().isocalendar() # returns ISO year, week, and weekday (2019, 38, 2) >>> date.today().strftime("%V") '38'
Ceci est couvert dans la documentation:
Tous les jours d'une nouvelle année précédant le premier dimanche sont considérés comme faisant partie de la semaine 0.
Vous recherchez peut-être la date de la semaine ISO , mais notez que dans ce système, le premier jour de la semaine est un lundi.
Vous pouvez obtenir le numéro de la semaine en utilisant ce système avec datetime.date.isocalendar ()
méthode , ou en formatant avec % V
:
>>> time.strftime('%U', time.strptime("2019-1-1", "%Y-%m-%d")) '00' >>> time.strftime('%U', time.strptime("2019-1-6", "%Y-%m-%d")) '01'
@jonrsharpe: isocalendar ()
utilise une définition différente d'un numéro de semaine
Oui, mais c'est probablement ce qui a troublé le PO.
@MartijnPieters Merci pour l'explication détaillée. J'ai oublié la partie où il est dit "Tous les jours d'une nouvelle année précédant le premier dimanche sont considérés comme étant dans la semaine 0."
@MartijnPieters Aussi, je cherche quelque chose comme ISO Weeknum mais quelque chose qui commence un dimanche, au lieu du lundi. La semaine 1 de l'ISO 2019 s'étend du 31 décembre 2018 au 6 janvier (du lundi au dimanche). Cependant, à ma convention, la semaine 1 2019 devrait s'étendre du 30 décembre 2018 au 5 janvier (du dimanche au lundi). Comment cela peut il etre accompli?
@ Newbie92: il existe de nombreux schémas de numérotation des semaines différents (WikiPedia dit qu'il y en a au moins 6 [] ( en.wikipedia.org/wiki/Week#Week_numbering )), je ne suis pas certain que vous souhaitiez vraiment que le schéma de numérotation ISO des semaines soit ajusté pour un dimanche. Tout ce que je sais, c'est que vous voulez que les semaines commencent le dimanche et que vous considérez le 1er janvier de cette année comme la semaine 1. Quel numéro de semaine devrait être le 31 décembre 2019? Dans le calendrier ISO, c'est la semaine 1 de 2020. Ou devrait-elle être la semaine 53 de 2019? Quelles sont les règles pour déterminer la première et la dernière semaine?
C'est correct puisque vous commencez à compter à partir du premier dimanche.
% U - numéro de semaine de l'année en cours, en commençant par le premier dimanche comme premier jour de la première semaine https://www.tutorialspoint.com/python/time_strftime.htm p >
C'est correct. Étant donné que tous les jours d'une nouvelle année précédant le premier dimanche sont considérés comme étant dans la semaine 0 (01/01 au 01/05), cette semaine est la semaine 37.
Attendez-vous le numéro de semaine ISO? C'est calculé légèrement différemment: "Les directives ISO 8601 année et ISO 8601 semaine ne sont pas interchangeables avec les directives année et numéro de semaine ci-dessus."