=head1 NOM DateTime::Calendar::FrenchRevolutionary - Dates dans le calendrier révolutionnaire =head1 RÉSUMÉ use DateTime::Calendar::FrenchRevolutionary; $dt = DateTime::Calendar::FrenchRevolutionary->new( year => 8, month => 2, day => 18, ); # conversion républicain -> grégorien... $dtgreg = DateTime->from_object( object => $dt ); # ... et en sens inverse $dtrev = DateTime::Calendar::FrenchRevolutionary->from_object( object => $dtgreg ); =head1 DESCRIPTION DateTime::Calendar::FrenchRevolutionary implémente le calendrier révolutionnaire, également appelé calendrier républicain, en usage en France de 1793 à 1805. Ce module implémente la plupart des méthodes du module C, cf. la documentation de ce module pour ces méthodes. =head1 NOTES HISTORIQUES Le calendrier révolutionnaire a été en vigueur en France du 24 novembre 1793 (4 Frimaire II) au 31 décembre 1805 (10 Nivôse XIV). C'était une tentative d'adopter la règle décimale (la base du système métrique) au calendrier. Dans ce calendrier, la semaine disparaît au profit de la décade (à ne pas confondre avec la décennie). De plus, chaque mois dure exactement 3 décades, ni plus, ni moins. Au début, l'année commençait à l'équinoxe d'automne, pour deux raisons. La première est que la République a été instaurée le 22 septembre 1792 et que l'équinoxe d'automne tombait ce jour-là. La seconde est que l'équinoxe est un symbole de l'égalité, le jour et la nuit ayant exactement la même durée. L'équinoxe d'automne était donc en accord avec la devise de la S S<« Liberté, égalité, fraternité »>. Mais cette règle s'est révélée peu pratique à suivre, donc Gilbert Romme a proposé pour le calendrier républicain une règle semblable à celle du calendrier grégorien. Il était également prévu une réforme de la mesure du temps au cours d'une journée, pour adopter une règle décimale. Il y aurait eu 1 jour = 10 heures, 1 heure = 100 minutes et 1 minute = 100 secondes. Cette réforme a été mise en suspens au bout de deux ans et elle n'a jamais été appliquée. =head1 MÉTHODES Comme la semaine a été remplacée par la décade, les méthodes comportant le mot I sont remplacées par des méthodes équivalentes comportant le mot I, sachant que dans ce contexte, le mot désigne une période de 10 jours. Le module supporte à la fois la mesure du temps anglo-babylonienne, ou sexagésimale, et la mesure du temps décimale. Lorsque l'on utilise le temps anglo-babylonien (Anglo-Babylonian time), le nom des méthodes et des paramètres est préfixé par C. Le temps décimal n'a pas de préfixe et le nom des méthodes et des paramètres est C, C, C et C. Les méthodes C et C ne permettent d'obtenir que le temps décimal. Pour obéir à la réalité historique, il aurait fallu fournir le temps sexagésimal, mais le temps décimal est plus rigolo et n'importe comment, il est possible d'obtenir le temps sexagésimal avec une conversion en grégorien vers le module C. =head2 Constructeurs =over 4 =item * new(...) Crée un objet C. Les paramètres sont les suivants. =over 4 =item * C Année de la date, numérique, obligatoire. L'an 1 correspond aux années grégoriennes 1792 et 1793. =item * C Le numéro du mois, dans l'intervalle 1..12, ou bien la valeur 13 pour les jours complémentaires de la fin de l'année. =item * C Le numéro du jour dans le mois, dans l'intervalle 1..30. Dans le cas des jours complémentaires, l'intervalle autorisé est 1..5 ou 1..6 selon que l'année est normale ou bissextile. =item * C, C, C Éléments de l'heure décimale. Les valeurs autorisées sont l'intervalle 0..9 pour l'heure et l'intervalle 0..99 pour les minutes et les secondes. Ces trois paramètres sont incompatibles avec les éléments de l'heure sexagésimale CI, cf. ci-dessous. =item * C, C, C Éléments de l'heure sexagésimale. Les valeurs autorisées sont l'intervalle 0..23 pour l'heure et l'intervalle 0..59 pour les minutes et les secondes. Ces trois paramètres sont incompatibles avec les éléments de l'heure décimale, cf. ci-dessus. =item * C Les seules valeurs autorisées sont C pour avoir les noms de mois et de jour en français et C pour les avoir en anglais. Aucune autre valeur n'est admise, y compris les valeurs mentionnant un territoire comme C ou C. =back =item * from_epoch( epoch => $epoch ) Crée un objet C à partir d'une valeur I. Cette valeur est le nombre de secondes écoulées depuis la date origine du système. Elle n'a rien à voir avec la date origine du calendrier. =item * now( ) Crée un objet date correspondant à l'instant précis de l'appel de la méthode. =item * from_object( object => $object, ... ) Crée une date en convertissant un objet C ou un objet d'un autre calendrier de la série C. C'est le meilleur moyen pour la conversion d'un calendrier à l'autre. =item * last_day_of_month( ... ) Pas testé. =item * clone Crée un nouvel objet C qui reprend les mêmes propriétés que l'objet d'origine. =back =head2 Accesseurs =over 4 =item * year Renvoie l'année. =item * month Renvoie le mois sous forme numérique, dans la plage 1..12. Si la date est un jour complémentaire de la fin de l'année, la méthode renvoie 13, qui n'est pas réellement un numéro de mois. =item * month_0 Renvoie le mois sous forme numérique, dans la plage 0..11. Si la date est un jour complémentaire de la fin de l'année, la méthode renvoie 12, qui n'est pas réellement un numéro de mois pour un mode de numération à partir de 0. =item * month_name Renvoie le nom du mois. Pour un jour complémentaire, renvoie "jour complémentaire". =item * month_abbr Renvoie une abréviation en trois lettres du nom du mois, ou "S-C" pour un jour complémentaire (parfois appelé I). =item * day_of_month, day, mday Renvoie le jour du mois, dans l'intervalle 1..30. =item * day_of_decade, dod, day_of_week, dow, wday Renvoie le jour de la décade, dans l'intervalle 1..10. Les méthodes C (jour de la semaine) et associées sont là pour assurer une certaine compatibilité avec C, même si le terme I (semaine) est inapproprié. =item * day_name Renvoie le nom du jour dans la décade. =item * day_abbr Renvoie l'abréviation du nom du jour dans la décade. =item * day_of_year, doy Renvoie le numéro du jour dans l'année, dans l'intervalle 1..366. =item * feast, feast_short, feast_long, feast_caps Renvoie la plante, l'animal, le minéral ou l'outil associé avec le jour. Le format par défaut est le format court. Si vous le souhaitez, vous pouvez avoir le format long avec C, dans lequel la fête du jour est préfixée par C, ou le format avec initiales en majuscule (C) dans lequel le préfixe et la fête comportent tous deux une majuscule. Par exemple, pour le 11 Vendémiaire, nous S feast, feast_short pomme de terre feast_long jour de la pomme de terre feast_caps Jour de la Pomme de terre =item * ymd, dmy, mdy Renvoie la date dans le format composite correspondant. Il est possible de fournir un paramètre optionnel pour choisir le séparateur des éléments de la date. =item * abt_hour, abt_minute, abt_min, abt_second, abt_sec Renvoie les heures, les minutes et les secondes en fonction de la règle sexagésimale (également appelée S<« heure anglo-babylonienne »> ou I). Les intervalles sont respectivement 0..23, 0..59 et 0..59. =item * hour, minute, min, second, sec Renvoie les heures, minutes et secondes en fonction de la règle décimale, à raison de 10 heures par jour, 100 minutes par heure et 100 secondes par heure. Les intervalles sont respectivement 0..9, 0..99 et 0..99. =item * abt_hms Renvoie une chaîne comportant les trois éléments de l'heure en fonction de la règle sexagésimale. Un paramètre supplémentaire permet de choisir le séparateur (C<:> par défaut). =item * hms Renvoie une chaîne comportant les trois éléments de l'heure en fonction de la règle décimale. Un paramètre supplémentaire permet de choisir le séparateur (C<:> par défaut). =item * iso8601 Renvoie la date et l'heure dans un format similaire au format ISO-8601 spécifié pour le calendrier grégorien. =item * is_leap_year Renvoie un booléen indiquant si l'année est bissextile. =item * decade_number, week_number Renvoie le numéro de la décade, dans l'intervalle 1..37 (1..36 pour les jours normaux, 37 pour les jours complémentaires). La méthode C (numéro de la semaine) permet d'assurer une certaine compatibilité avec C, même si le terme S<« semaine »> est inapproprié. =item * decade, week Renvoie une liste à deux éléments, soit l'année et le numéro de la décade. Notez que les décades sont systématiquement alignées sur le début de l'année. Il n'y a donc pas lieu de faire la distinction entre l'année du jour et l'année de la décade, comme cela se fait pour l'année de la semaine dans le calendrier grégorien. De ce fait, le premier élément renvoyé par la méthode C est systématiquement égal à la valeur obtenue par la méthode C. =item * utc_rd_values Renvoie le nombre de jours et le nombre de secondes I pour le fuseau UTC. Le but principal de cette méthode est de permettre la conversion de date vers un autre calendrier en fonction d'une date-heure du calendrier républicain. XXXX nanosecondes ? =item * jd, mjd Ces méthodes renvoient le S<« jour julien »> et le S<« jour> julien S (I et I), respectivement. La valeur est un nombre flottant, la partie décimale représentant la portion heures-minutes-secondes de l'objet. =item * utc_rd_as_seconds Combine la valeur du nombre de jours I avec la valeur du nombre de secondes I pour obtenir un nombre de secondes. Cette méthode peut servir si vous avez besoin de caractériser la date-heure pas un nombre unique. =item * strftime( $format, ... ) Cette méthode implémente des fonctionnalités semblables à celles de C en C ou dans le module C. Comme pour le module, si plusieurs formats sont transmis en paramètre, la méthode renvoie une liste de chaînes de caractères, une pour chaque format. Cf. la section L pour obtenir la liste de toutes les spécifications possibles. =item * epoch Renvoie la valeur I UTC pour l'objet. De façon interne, c'est implémenté avec C, qui utilise la date origine d'Unix, même sur des machines qui ont une autre date origine (comme Mac OS). Les dates-heures antérieures à cette date origine seront représentées par un nombre négatif. Étant donné que les valeurs I ne sont pas capable de représenter toutes les dates sur la plupart des plates-formes, cette méthode est susceptible de renvoyer C dans certains cas. L'utilisation de la date origine de votre système est sujette à erreur, étant donné que la plage de valeurs est très limitée sur les machines à 32 bits. De plus, le fait que des systèmes d'exploitation différents ont des dates origines différentes est une autre source d'erreurs. =item * on_date Donne le résumé de quelques événements historiques qui se sont produits à la même date (jour+mois). Ces événements ont eu lieu pendant la période où le calendrier républicain était en vigueur, c'est-à-dire jusqu'en 1805. Les événements évoqués se sont produits en France ou bien sont des batailles auxquelles des armées françaises ont pris part. Cette méthode accepte un argument facultatif, la langue. Pour le moment, seuls S<« en »> pour l'anglais et S<« fr »> pour le français sont disponibles. Si ce paramètre est absent, la méthode utilise la langue de la localisation de la date. La liste des événements est encore incomplète. Elle sera mise à jour dans les versions ultérieures du module. La plupart des événements sont extraits du I, un livre anonyme publié en l'an VII (1798). Il n'est donc plus soumis au copyright. Notez également que ce livre est un livre de propagande et que la vision des événements est complètement biaisée. =back =head2 Spécifications pour strftime Les spécifications suivantes sont permises dans la chaîne de format transmise à la méthode S :> =over 4 =item * %a L'abréviation du jour de la décade. =item * %A Le nom entier du jour de la décade. =item * %b L'abréviation du nom du mois, ou S<« S-C »> pour les jours complémentaires (abréviation de I, l'autre nom de ces jours). =item * %B Le nom complet du mois. =item * %C Les deux premiers chiffres de l'année, correspondant plus ou moins au siècle. =item * %d Le jour du mois sous forme numérique (de 01 à 30). =item * %D Équivalent à %m/%d/%y. Peut-être pas la meilleure façon de se faire comprendre en Europe... =item * %e Comme C<%d>, le jour du mois sous forme numérique, mais le zéro de gauche est remplacé par un blanc. =item * %F Équivalent à %Y-%m-%d (le format ISO 8601) =item * %G Exactement la même chose que C<%Y>, étant donné que les décades sont alignées avec les mois, donc avec le début de l'année. =item * %g Exactement la même chose que C<%y>, étant donné que les décades sont alignées avec les mois, donc avec le début de l'année. =item * %h Équivalent à %b. =item * %H L'heure sous forme numérique, en utilisant une horloge décimale. La valeur est donc dans l'intervalle 0..9 et comporte un seul caractère. =item * %I L'heure sous forme numérique, en utilisant les nombres marqués sur le cadran des horloges décimales. La valeur est donc dans l'intervalle 1..10. La petite aiguille effectue un seul tour de cadran par jour, il n'y a donc pas de découpage en matin et après-midi. Les valeurs sont identiques à celles de la spécification C<%H>, sauf la valeur 0 (pour C<%H>) qui correspond à 10 pour C<%I>. =item * %j Le jour de l'année, sous la forme d'un nombre 001..366. =item * %k L'heure décimale, sous la forme d'une chaîne de deux caractères, un blanc puis un chifre 0..9 (cf C<%H>). =item * %l Identique à C<%I>. =item * %m Le mois sous forme numérique 01..12, ou 13 s'il s'agit d'un jour complémentaire. =item * %M Les minutes décimales sous forme S 00..99. =item * %n Un caractère de saut de ligne. =item * %p La chaîne C ou C correspondant à l'heure donnée, ou leur équivalent local. En particulier, midi donne C et minuit donne C. =item * %P Comme C<%p>, mais en S C ou C ou les chaînes correspondantes en local. =item * %r L'heure dans la notation AM/PM. Avec la localisation POSIX, c'est équivalent à `%I:%M:%S %p'. =item * %R L'heure avec une notation sur 10 heures (%H:%M). Voir C<%T> ci-dessous si vous voulez les secondes. =item * %s Le nombre de secondes depuis la date origine du système. =item * %S Les secondes sous forme numérique (de 00 à 99). =item * %t Un caractère de tabulation. =item * %T L'heure décimale (%H:%M:%S). =item * %u Le jour de la décade sous forme numérique, 1..10, avec 1 représentant Primidi. Cf. C<%w>. =item * %U Le numéro de la décade dans l'année, sous forme numérique, 00..31. =item * %V Identique à C<%U>. =item * %w Le jour de la décade sous forme numérique, 0..9, avec 0 représentant Décadi. Cf. C<%u>. =item * %W Le numéro de la décade dans l'année, sous forme numérique, 00..31. Identique à C<%U>. =item * %y L'année sur deux chiffres, sans indication du siècle (de 00 à 99). =item * %Y L'année sur 4 chiffres. =item * %Ey L'année en chiffres romains minuscules. =item * %EY L'année en chiffres romains majuscules, ce qui est la façon traditionnelle d'écrire les années du calendrier républicain. =item * %z Le fuseau horaire exprimé par le décalage vis-à-vis du fuseau UTC. Indispensable pour obtenir des dates conformes à la RFC-822 (avec le format C<%a, %d %b %Y %H:%M:%S %z>). Mais comme le module ne gère pas les fuseaux horaires autres que le fuseau flottant, cette spécification vous donnera des résultats curieux et vous ne pourrez pas vous mettre en conformité avec la RFC-822. De toutes façons, la RFC-822 exige le calendrier grégorien, S =item * %Z Le nom ou l'abréviation du fuseau horaire, si le module avait été capable d'en tenir compte. =item * %% Un caractère C<%>. =back =head1 REMARQUES =head2 Fuseaux horaires Seul le fuseau horaire flottant est autorisé. Les fuseaux horaires sont apparus à la fin du XIXe siècle, à l'époque où la communication instantanée (télégraphe électrique) en a montré l'utilité. Mais à cette époque, le calendrier républicain n'était plus utilisé. =head2 Secondes intercalaires Le module n'en tient pas compte. =head2 Localisation Pour le moment, seul le français et l'anglais sont disponibles. Pas d'indication du territoire ni de variante. =head1 SUPPORT Le support de ce module est assuré par la liste de diffusion C. Cf. http://lists.perl.org/ pour les détails. Utilisez l'anglais si vous écrivez sur cette liste, mais dans les messages personnels, vous pouvez m'écrire en français. =head1 AUTEUR Jean Forget (C arobase C point C) Ce module s'inspire du module C de Dave Rolsky, du module C d'Eugene van der Pijll et de mon ancien module C. Le développement de ce module est hébergé par I, L. =head1 VOIR ÉGALEMENT =head2 Logiciel date(1), perl(1), DateTime(3), DateTime::Calendar::Pataphysical(3), Date::Convert::French_Rev calendar/cal-french.el dans emacs-21.2 ou xemacs 21.1.8 =head2 Livres Quid 2001, M and D Frémy, éd. Robert Laffont Agenda Républicain 197 (1988/89), publ. Syros Alternatives N'importe quel livre d'Histoire de collège ou de lycée sur la Révolution Française The French Revolution, Thomas Carlyle, Oxford University Press Calendrier Militaire, anonyme =head2 Internet http://datetime.perl.org/ http://datetime.mongueurs.net/ http://www.faqs.org/faqs/calendars/faq/part3/ http://zapatopi.net/metrictime.html =head1 LICENCE Copyright (c) 2003, 2004 Jean Forget et les Mongueurs de Perl. Tous droits réservés. Ce logiciel est un logiciel S vous pouvez le redistribuer et le modifier aux mêmes conditions que Perl lui-même. =cut