Le premier jour de la première semaine de 2012… à New-York !

Discussion lunaire fin 2011 à propos de la première semaine de 2012 : Google Calendar et Microsoft Outlook ne sont pas d’accord ! Il y a ceux qui pensent que la première semaine commence au premier lundi de l’année ; Et Outlook qui met le premier jour de l’année la première semaine… Si on s’en réfère à la description ISO des semaines, la première semaine de l’année est celle qui contient le premier jeudi de l’année.

Cette année, la première semaine commence donc le 2 comme le confirme le SQL ci-dessous qui utilise les formats de date d’Oracle :

select to_char(to_date('01/01/2012','DD/MM/YYYY'), 'IW/IYYY') SEM
from dual;
SEM
-------
52/2011

select to_char(to_date('02/01/2012','DD/MM/YYYY'), 'IW/IYYY') SEM
from dual;

SEM
-------
01/2012

Le 31 décembre 2012 est quant à lui la première semaine de 2013 :

select to_char(to_date('31/12/2012','DD/MM/YYYY'), 'IW/IYYY') SEM
from dual;

SEM
-------
01/2013

Tout s’éclaire donc… Mais à vrai dire, ma préoccupation était moins le numéro de la semaine que la date du premier jour de la première semaine de l’année mais pas à Paris ! En France, le premier jour de la semaine est le lundi alors qu’aux Etats-Unis, c’est le dimanche :

alter session set nls_territory=FRANCE;

select to_char(to_date('01/01/2012','DD/MM/YYYY'), 'D') DAY
from dual

D
-
7

alter session set nls_territory=AMERICA;

D
-
1

Question : « Quel est donc le premier jour de la première semaine de l’année au Etats-Unis ? ». Demandons à Oracle…

alter session set nls_territory=AMERICA;
alter session set nls_date_format='DD/MM/YYYY';

select trunc(to_date('02/01/2012','DD/MM/YYYY'), 'IW') DAY
from dual;

DAY
----------
02/01/2012

La réponse est donc un lundi… Même aux Etats-Unis ! Pourquoi ? Parce que dans la définition ISO des semaines, le premier jour de la semaine est le lundi. Seulement, voilà, j’ai beau chercher dans les formats de date d’Oracle, il n’y a pas de format qui permette de trouver le jour de la semaine ISO d’une date. ‘D’ dépend toujours du territoire. L’intérêt d’être en France est que ‘D’ signifie donc aussi le jour de la semaine ISO… Mais ce n’est pas vrai partout !

Et voilà, l’histoire de mon premier bug de 2012 qui est aussi le dernier de la dernière semaine de 2011… Bref, bonne année à tous !