web-dev-qa-db-fra.com

Date à laquelle la commande donne un mauvais numéro de semaine pour le 31 décembre

Lorsque j'essaie d'obtenir le numéro de semaine du 31 décembre, il renvoie 1. Lorsque j'obtiens le numéro de semaine du 30 décembre, j'obtiens 52 --- ce à quoi je m'attendrais. Le jour lundi est correct. Il s'agit d'un RPI exécutant Ubuntu.

$ date -d "2018-12-30T1:58:55" +"%V%a"

52Sun

$ date -d "2018-12-31T1:58:55" +"%V%a"

01Mon

Même problème sans chaîne de temps

$ date -d "2018-12-31" +"%V%a"

01Mon
21
George Shafer

Cela vous donne la semaine ISO qui commence un lundi.

Le système de date hebdomadaire ISO est en fait un système de calendrier de semaine bissextile qui fait partie de la norme de date et d'heure ISO 8601 publiée par l'Organisation internationale de normalisation (ISO) depuis 1988 (dernière révision en 2004) et, avant cela, il était défini dans ISO (R) 2015 depuis 1971. Il est utilisé (principalement) dans les administrations publiques et les entreprises pendant les exercices, ainsi qu'en chronométrage. Ceci était auparavant connu sous le nom de "codage de date industriel". Le système spécifie une année de la semaine au sommet du calendrier grégorien en définissant une notation pour les semaines ordinales de l'année.


Une année ISO de numérotation des semaines (également appelée informellement année ISO) comprend 52 ou 53 semaines complètes. C'est 364 ou 371 jours au lieu des 365 ou 366 jours habituels. La semaine supplémentaire est parfois appelée semaine bissextile, bien que l'ISO 8601 n'utilise pas ce terme.

Les semaines commencent le lundi. L'année de chaque semaine est l'année grégorienne au cours de laquelle le jeudi tombe. La première semaine de l'année contient donc toujours le 4 janvier. La numérotation ISO des semaines de l'année s'écarte donc légèrement du grégorien pendant quelques jours près du 1er janvier.


Si vous souhaitez afficher 12/31 comme semaine 52, vous devez utiliser %U, qui n'utilise pas la norme ISO:

$ date -d "2018-12-31T1:58:55" +"%V%a"
01Mon
$ date -d "2018-12-31T1:58:55" +"%U%a"
52Mon
49
jesse_b

La définition du numéro de semaine est différente entre l'Europe et les États-Unis, probablement ISO par rapport aux normes ANSI. Cela peut être lié à une semaine du dimanche au samedi ou du lundi au dimanche, et cela peut à nouveau être lié à la définition juive contre chrétienne du jour du Seigneur (sabbat vs dimanche).

Pour l'Europe, la semaine numéro 1 contient le premier jeudi de janvier et contient donc un minimum de 4 jours (c'est-à-dire une majorité) appartenant à la nouvelle année (jeu-ven-sam-dim).

Quoi qu'il en soit, dans les années où TOUS (!!) les numéros de semaine sont +/- 1 différents entre l'Europe et les États-Unis, cela donne beaucoup de plaisir à définir les horaires dans les entreprises multinationales. :-)

3
StessenJ