Les chirographes tournaisiens sur lesquels je travaille pour le moment donnent souvent la date de temps en indiquant un jour de la semaine. Voici un exemple :
l’an de grasce .mil.ccc.&.xiiii., lendemain dou jour S[ain]t Luc par .i. samedi ou mois d’octembre
L’acte (ici, une reconnaissance de dette) est donc passé devant les échevins en 1314, durant le mois d’octobre. Pour le dater complètement, il faut encore déterminer à quel jour correspond le samedi dont il est question, le lendemain de la Saint-Luc. Ce saint étant fêté le 18 octobre, il y a tout à parier que la date que nous cherchons correspond au 19 octobre.
En constituant ma base de données, j’ai demandé à R d’identifier les jours de la semaine qui correspondent aux dates données dans les actes. En plus d’apporter d’éventuelles informations quant à l’élaboration des chirographes (imaginons par exemple que tous les chirographes soient datés d’un même jour de la semaine, cela suggérerait que les actes de juridiction gracieuse ne passent devant les échevins qu’une fois par semaine), cette opération permet de vérifier la cohérence de la date identifiée avec celle qui est donnée dans l’acte, et d’effectuer ainsi une sorte de data quality check. J’ai pour cela utilisé l’excellent package lubridate, qui permet d’écrire par exemple pour l’acte qui nous occupe :
wday(ymd("1314-10-19"),label = TRUE,abbr = FALSE,week_start = 1)
La réponse de R pour cette date-là m’a surpris :
[1] vendredi
Après avoir vérifié que je ne m’étais pas trompé de jour pour la Saint-Luc, j’ai effectué le test pour d’autres actes, et suis toujours arrivé à la même erreur, qui donne un décalage d’un jour par rapport au jour donné dans la documentation. J’étais d’autant plus étonné que j’avais déjà utilisé ces fonctions pour identifier les jours de la semaine qui correspondaient aux actes des chirographes passés devant les échevins d’Ypres entre 1249 et 1291, et que cela fonctionnait sans problème.
Après quelques heures jours de frustration totale, j’ai fini par comprendre que le problème provenait de la différence entre le calendrier julien et le calendrier grégorien. C’est le second qui est utilisé par le package lubridate. Mais, puisqu’il n’est instauré qu’en 1582, ce n’est évidemment pas celui qui est utilisé au 14e siècle : les dates de mes chirographes tournaisiens doivent donc être comprises selon le calendrier julien. Voici ce que dit la page Wikipedia dédiée à la différence entre les deux calendriers :
Dans le calendrier julien, tous les millésimes multiples de quatre sont des années bissextiles, ce qui produit un décalage d’environ 3 jours par 400 ans par rapport à l’année astronomique. Dans le calendrier grégorien, les années séculaires ne sont normalement pas bissextiles (on parle alors d’« années communes »). Les années 1700, 1800 et 1900 furent donc bissextiles dans le calendrier julien et communes dans le calendrier grégorien. Par contre, les millésimes multiples de 400 (1600, 2000, 2400, 2800, 3200. etc.) sont bissextiles dans les deux calendriers.
Le calendrier julien « retarde » par rapport au calendrier grégorien. Ce retard était de 10 jours lors de l’instauration du calendrier grégorien en 1582. Du fait que les années séculaires ne sont normalement pas bissextiles dans le calendrier grégorien, le retard du calendrier julien s’accroit d’un jour par siècle, sauf à la fin des XVIe et XXe siècles. Le retard est actuellement de 13 jours.
La consultation d’une table de conversion entre les deux calendriers a fini de dissiper le mystère. Le problème ne s’était pas posé dans le cas des chirographes yprois du 13e siècle pour une bonne raison : le décalage est de sept jours entre 1100 et 1300, et est donc tout à fait invisible si on s’en tient aux jours de la semaine (lundi +7 = lundi !). Ce décalage passe à 8 jours à partir de 1300, raison pour laquelle j’observais un jour de différence dans les actes du 14e siècle.
Pour corriger ce problème dans R, j’ai d’abord été voir du côté du package ConvCalendar, dédié à la conversion entre différents calendriers. Hélas, celui-ci n’est plus disponible : la page CRAN du package dit
Package ‘ConvCalendar’ was removed from the CRAN repository.
J’ai donc finalement écrit une petite fonction qui fait la conversion pour les deux siècles qui m’occupent pour le moment :
library(lubridate) Jul2Gre = function(dateJul){ if (dateJul > dmy("28-02-1100") & dateJul <= dmy("28-02-1300")) { delta = 7 } else if (dateJul > dmy("28-02-1300") & dateJul <= dmy("28-02-1400")){ delta = 8 } else { delta = NA } dateGre = dateJul + delta return(dateGre) }
Le problème est ainsi résolu !
wday(Jul2Gre(dmy("19-10-1314")),label = TRUE,abbr = FALSE) [1] samedi