|
|
| |
DateTime::Calendar::FrenchRevolutionary(3) |
User Contributed Perl Documentation |
DateTime::Calendar::FrenchRevolutionary(3) |
DateTime::Calendar::FrenchRevolutionary - Dates in the French Revolutionary
Calendar
use DateTime::Calendar::FrenchRevolutionary;
# Use the date "18 Brumaire VIII" (Brumaire being the second month)
$dt = DateTime::Calendar::FrenchRevolutionary->new( year => 8,
month => 2,
day => 18,
);
# convert from French Revolutionary to Gregorian...
$dtgreg = DateTime->from_object( object => $dt );
# ... and back again
$dtrev = DateTime::Calendar::FrenchRevolutionary->from_object( object => $dtgreg );
DateTime::Calendar::FrenchRevolutionary implements the French Revolutionary
Calendar. This module implements most methods of DateTime; see the
DateTime(3) manpage for all methods.
The documentation uses the word décade (the first "e"
having an acute accent). This French word is not the translation of the
English word "decade" (ten-year period). It means a ten-day
period.
For your information, the French word for a ten-year period is
décennie.
The Revolutionary calendar was in use in France from 24 November 1793 (4
Frimaire II) to 31 December 1805 (10 Nivôse XIV). An attempt to apply
the decimal rule (the basis of the metric system) to the calendar. Therefore,
the week disappeared, replaced by the décade. In addition, all months
have exactly 3 décades, no more, no less.
At first, the year was beginning on the equinox of autumn, for two
reasons. First, the republic had been established on 22 September 1792,
which happened to be the equinox, and second, the equinox was the symbol of
equality, the day and the night lasting exactly 12 hours each. It was
therefore in tune with the republic's motto "Liberty, Equality,
Fraternity". But it was not practical, so Romme proposed a leap year
rule similar to the Gregorian calendar rule.
In his book The French Revolution, the XIXth century writer
Thomas Carlyle proposes these translations for the month names:
- Vendémiaire -> Vintagearious
- Brumaire -> Fogarious
- Frimaire -> Frostarious
- Nivôse -> Snowous
- Pluviôse -> Rainous
- Ventôse -> Windous
- Germinal -> Buddal
- Floréal -> Floweral
- Prairial -> Meadowal
- Messidor -> Reapidor
- Thermidor -> Heatidor
- Fructidor -> Fruitidor
Each month has a duration of 30 days. Since a year lasts 365.25
days (or so), five additional days (or six on leap years) are added after
Fructidor. These days are called Sans-Culottides. For programming
purposes, they are considered as a 13th month (much shorter than the 12
others).
There was also an attempt to decimalize the day's subunits, with 1
day = 10 hours, 1 hour = 100 minutes and 1 minute = 100 seconds. But this
reform was put on hold after two years or so and it never reappeared.
Other reforms to decimalize the time has been proposed during the
last part of the XIXth Century, but these reforms were not applied too. And
they are irrelevant for this French Revolutionary calendar module.
Since the week has been replaced by the décade, the corresponding method
names still are "decade_number",
"day_of_decade", etc. English speakers,
please note that this has nothing to do with a 10-year period.
The module supports both Anglo-Babylonian time (24x60x60) and
decimal time. The accessors for ABT are
"abt_hour",
"abt_minute",
"abt_second" and
"abt_hms", the accessors for decimal time
are "hour",
"minute",
"second" and
"hms". The
"strftime" and
"iso8601" methods use only decimal time.
The ABT accessors are provided to be historically correct, since the decimal
time reform was never put in force. Yet, emphasis is on decimal time because
it is more fun than sexagesimal time, which anyhow can be obtained with the
standard Gregorian "DateTime.pm"
module.
- •
- new(...)
Creates a new date object. This class accepts the following
parameters:
- "year"
Year number, mandatory. Year 1 corresponds to Gregorian years
late 1792 and early 1793.
- "month"
Month number, in the range 1..12, plus number 13 to designate
the end-of-year additional days.
- "day"
Day number, in the range 1..30. In the case of additional
days, the range is 1..5 or 1..6 depending on the year (leap year or
normal).
- "hour",
"minute",
"second"
Decimal hour number, decimal minute number and decimal second
number. The hour is in the 0..9 range, both other parameters are in the
0..99 range. These parameters cannot be specified with the sexagesimal
time parameters "abt_"xxx (see
below).
- "abt_hour",
"abt_minute",
"abt_second"
Sexagesimal hour number, sexagesimal minute number and
sexagesimal second number. The hour is in the 0..23 range, both other
parameters are in the 0..59 range. These parameters cannot be specified
with the decimal time parameters (see above).
- "locale"
Only the values "fr"
(French), "en" (English),
"es" (Spanish) and
"it" (Italian) are allowed. Default is
French. No other values are possible, even territory variants such as
"fr_BE" or
"en_US".
- from_epoch( epoch => $epoch )
Creates a date object from a timestamp value. This timestamp
is the number of seconds since the computer epoch, not the calendar
epoch.
- now( )
Creates a date object that corresponds to the precise instant
the method is called.
- from_object( object => $object, ... )
Creates a date object by converting another object from the
DateTime suite. The preferred way for calendar to calendar
conversion.
- last_day_of_month( ... )
Same as "new", except that
the "day" parameter is forbidden and
is automatically set to the end of the month. If the
"month" parameter is 13 for the
additional days, the day is set to the end of the year, either the 5th
or the 6th additional day.
- clone
Creates a replica of the original date object.
- set( .. )
This method can be used to change the local components of a
date time, or its locale. This method accepts any parameter allowed by
the "new()" method.
This method performs parameters validation just as is done in
the "new()" method.
- year
Returns the year. %Y or
%G in
"strftime".
- month
Returns the month in the 1..12 range. If the date is an
additional day at the end of the year, returns 13, which is not really a
month number. %m or %f
in "strftime".
- month_0
Returns the month in the 0..11 range. If the date is an
additional day at the end of the year, returns 12, which is not really a
month number.
- month_name
Returns the French name of the month or its English
translation. No other language is supported yet. For the additional days
at the end of the year, returns "jour complémentaire",
the translation of "additional day".
%B in
"strftime".
Note: The English translations for the month names come from
Thomas Carlyle's book.
- month_abbr
Returns a 3-letter abbreviation of the month name. For the
additional days at the end of the year, returns "S-C", because
these additional days were also known as the Sans-culottides.
%b or %h in
"strftime".
- day_of_month, day, mday
Returns the day of the month, from 1..30.
%d or %e in
"strftime".
- day_of_decade, dod, day_of_week, dow, wday
Returns the day of the décade, from 1..10. The
"dow",
"wday" and
"day_of_week" names are there for
compatibility's sake with "DateTime",
even if the word "week" is improper.
%u in
"strftime", but not
%w (because the value differs on
décadi).
- day_name
Returns the name of the current day of the
décade. %A in
"strftime".
- day_abbr
Returns the abbreviated name of the current day of the
décade. %a in
"strftime".
- day_of_year, doy
Returns the day of the year. %j in
"strftime".
- feast, feast_short, feast_long, feast_caps
Returns the plant, animal, mineral or tool associated with the
day. The default format is "short". If
requested, you can ask for the "long"
format, with a "jour de..." prefix, or
the "caps" format, with the first
letter of the prefix and feast capitalized. Example: for 11
Vendémiaire, we have:
feast, feast_short pomme de terre
feast_long jour de la pomme de terre
feast_caps Jour de la Pomme de terre
%Ej, %EJ,
%Oj or "%*" in
"strftime".
Note: the English translation for the feasts comes mainly from
Alan Taylor's website "Preserving the French Republican
Calendar".
- ymd, dmy, mdy
Returns the date in the corresponding composite format. An
optional parameter allows you to choose the separator between the date
elements. %F in
"strftime".
- abt_hour, abt_minute, abt_min, abt_second, abt_sec
Return the corresponding time elements, using a sexagesimal
scale. This is also sometimes known as the Anglo-Babylonian
Time.
- hour, minute, min, second, sec
Return the corresponding time elements, using a decimal scale,
with 10 hours per day, 100 minutes per hour and 100 seconds per minute.
%H, %M and
%S in
"strftime".
- abt_hms
Returns a composite string with the three time elements. Uses
the Anglo-Babylonian Time. An optional parameter allows you to
choose the separator (":" by
default).
- hms
Returns a composite string with the three time elements. Uses
the decimal time. An optional parameter allows you to choose the
separator (":" by default).
- iso8601
Returns the date and time is a format similar to what ISO-8601
has specified for the Gregorian calendar.
- is_leap_year
Returns a true value if the year is a leap year, false
else.
- decade_number, week_number
Returns the décade number.
%U, %V or
%W in
"strftime".
- decade, week
Returns a 2-element list, with the year number and the
décade number. Since the décade is always aligned
with a month and then with a year, the year element is always the same
as the date's year. Anyhow, this is done for compatibility with
DateTime's "week" method.
- utc_rd_values
Returns the current UTC Rata Die days, seconds and nanoseconds
as a 3-element list. This exists primarily to allow other calendar
modules to create objects based on the values provided by this
object.
- jd, mjd
These return the Julian Day and Modified Julian Day,
respectively. The value returned is a floating point number. The
fractional portion of the number represents the time portion of the
datetime.
- utc_rd_as_seconds
Returns the current UTC Rata Die days and seconds purely as
seconds. This is useful when you need a single number to represent a
date.
- local_rd_as_seconds
Returns the current local Rata Die days and seconds purely as
seconds.
- strftime( $format, ... )
This method implements functionality similar to the
"strftime()" method in C. However, if
given multiple format strings, then it will return multiple elements,
one for each format string.
See the strftime Specifiers section for a list of all possible
format specifiers.
- epoch
Return the UTC epoch value for the datetime object.
Internally, this is implemented
"epoch" from
"DateTime", which in turn calls
"Time::Local", which uses the Unix
epoch even on machines with a different epoch (such as Mac OS).
Datetimes before the start of the epoch will be returned as a negative
number.
Since epoch times cannot represent many dates on most
platforms, this method may simply return undef in some cases.
Using your system's epoch time may be error-prone, since epoch
times have such a limited range on 32-bit machines. Additionally, the
fact that different operating systems have different epoch beginnings is
another source of bugs.
- on_date
Gives a few historical events that took place on the same date
(day+month, irrespective of the year). These events occur during the
period of use of the calendar, that is, no later than Gregorian year
1805. The related events either were located in France, or were battles
in which a French army was involved.
This method accepts one optional argument, the language. For
the moment, only "en" for English and "fr" for
French are available. If not given, the method will use the date
object's current locale.
Not all eligible events are portrayed there. The events
database will be expanded in future versions.
Most military events are extracted from Calendrier
Militaire, a book written by an anonymous author in VII (1798) or
so. I guess there is no longer any copyright attached. Please note that
this is a propaganda book, which therefore gives a very biased view of
the events.
The following specifiers are allowed in the format string given to the
"strftime()" method:
- %a
The abbreviated day of décade name.
- %A
The full day of décade name.
- %b
The abbreviated month name, or 'S-C' for additional days
(abbreviation of Sans-culottide, another name for these
days).
- %B
The full month name.
- %c
The date-time, using the default format, as defined by the
current locale.
- %C
The century number (year/100) as a 2-digit integer.
- %d
The day of the month as a decimal number (range 01 to 30).
- %D
Equivalent to %m/%d/%y. This is not a
good standard format if you have want both Americans and Europeans (and
others) to understand the date!
- %e
Like %d, the day of the month as a
decimal number, but a leading zero is replaced by a space.
- %f
The month as a decimal number (1 to 13). Unlike
%m, a leading zero is replaced by a space.
- %F
Equivalent to %Y-%m-%d (the ISO 8601
date format)
- %g
Strictly similar to %y, since
décades are always aligned with the beginning of the year
in this calendar.
- %G
Strictly similar to %Y, since
décades are always aligned with the beginning of the year
in this calendar.
- %h
Equivalent to %b.
- %H
The hour as a decimal number using a 10-hour clock (range 0 to
9). The result is a single-char string.
- %I
The hour as a decimal number using the numbers on a clockface,
that is, range 1 to 10. The result is a single-char string, except for
10.
- %j
The day of the year as a decimal number (range 001 to
366).
- %Ej
The feast for the day, in long format ("jour de la pomme
de terre"). Also available as %*.
- %EJ
The feast for the day, in capitalised long format ("Jour
de la Pomme de terre").
- %Oj
The feast for the day, in short format ("pomme de
terre").
- %k
The hour (10-hour clock) as a decimal number (range 0 to 9);
the result is a 2-char string, the digit is preceded by a blank. (See
also %H.)
- %l
The hour as read from a clockface (range 1 to 10). The result
is a 2-char string, the digit is preceded by a blank, except of course
for 10. (See also %I.)
- %L
The year as a decimal number including the century. Strictly
similar to %Y and
%G.
- %m
The month as a decimal number (range 01 to 13).
- %M
The minute as a decimal number (range 00 to 99).
- %n
A newline character.
- %p
Either `AM' or `PM' according to the given time value, or the
corresponding strings for the current locale. Noon is treated as `pm'
and midnight as `am'.
- %P
Like %p but in lowercase: `am' or `pm'
or a corresponding string for the current locale.
- %r
The decimal time in a.m. or p.m. notation. In the POSIX locale
this is equivalent to `%I:%M:%S %p'.
- %R
The decimal time in 10-hour notation (%H:%M). (SU) For a
version including the seconds, see %T below.
- %s
The number of seconds since the epoch.
- %S
The second as a decimal number (range 00 to 99).
- %t
A tab character.
- %T
The decimal time in 10-hour notation (%H:%M:%S).
- %u
The day of the décade as a decimal, range 1 to
10, Primidi being 1 and Décadi being 10. See also
%w.
- %U
The décade number of the current year as a
decimal number, range 01 to 37.
- %V
The décade number (French Revolutionary
equivalent to the ISO 8601:1988 week number) of the current year as a
decimal number, range 01 to 37. Identical to %U,
since décades are aligned with the beginning of the
year.
- %w
The day of the décade as a decimal, range 0 to
9, Décadi being 0. See also %u.
- %W
The décade number of the current year as a
decimal number, range 00 to 37. Strictly similar to
%U and %V.
- %y
The year as a decimal number without a century (range 00 to
99).
- %Y
The year as a decimal number including the century.
- %Ey
The year as a lowercase Roman number.
- %EY
The year as a uppercase Roman number, which is the traditional
way to write years when using the French Revolutionary calendar.
- %z
The time-zone as hour offset from UTC. Required to emit
RFC822-conformant dates (using "%a, %d
%b %Y
%H:%M:%S %z").
Since the module does not support time zones, this gives silly results
and you cannot be RFC822-conformant. Anyway, RFC822 requires the
Gregorian calendar, doesn't it?
- %Z
The time zone or name or abbreviation, should the module have
supported them.
- %*
The feast for the day, in long format ("jour de la pomme
de terre"). Also available as %Ej.
- %%
A literal `%' character.
Only the floating time zone is supported. Time zones were created in the
late XIXth century, at a time when fast communication (railroads) and instant
communication (electric telegraph) made it necessary. But at this time, the
French Revolutionary calendar was no longer in use.
For the moment, only French, English, Spanish and Italian are available. For the
English translation, I have used Thomas Carlyle's book and Alan Taylor's web
site at kokogiak.com (see below). Then, I have checked some translations with
Wikipedia and Jonathan Badger's French Revolutionary Calendar module written
in Ruby.
Some feast names are not translated, other's translations are
doubtful (they are flagged with a question mark). Remarks are welcome.
The various sources for the feasts are somewhat contradictory. The most obvious
example if the 4th additional day, which is "Jour de l'opinion" (day
of opinion) in some documents and "Jour de la raison" (day of
reason) in others.
In addition, the sources have several slight differences between
them. All of them obviously include some typos. [Annexe] is chosen as the
reference since it is the definitive legislative text that officially
defines names of days in the French revolutionary calendar. This text
introduces amendments to the original calendar set up by Fabre
d'Églantine in [Fabre], and gives in annex the amended calendar. When
there is a difference between the amended calendar and [Fabre] with
amendments (yes it can happen!), [Fabre] version prevails. Obvious typos in
[Annexe] (yes it can happen!) are preserved, with the exception of accented
letters because they are fuzzy rendered in original prints, or cannot be
printed at all at that time on letters in uppercase.
The bracket references refer to entries in the "SEE
ALSO" section, "Internet" subsection below.
Support for this module is provided via the datetime@perl.org email list. See
<https://lists.perl.org/> for more details.
Please report any bugs or feature requests to Github at
<https://github.com/jforget/DateTime-Calendar-FrenchRevolutionary>,
and create an issue or submit a pull request.
If you have no feedback after a week or so, try to reach me by
email at JFORGET at cpan dot org. The notification from Github may have
failed to reach me. In your message, please mention the distribution name in
the subject, so my spam filter and I will easily dispatch the email to the
proper folder.
On the other hand, I may be on vacation or away from Internet for
a good reason. Do not be upset if I do not answer immediately. You should
write me at a leisurely rythm, about once per month, until I react.
If after about six months or a year, there is still no reaction
from me, you can worry and start the CPAN procedure for module adoption. See
<https://groups.google.com/g/perl.module-authors/c/IPWjASwuLNs>
<https://www.cpan.org/misc/cpan-faq.html#How_maintain_module> and
<https://www.cpan.org/misc/cpan-faq.html#How_adopt_module>.
Jean Forget <JFORGET@cpan.org>
based on Dave Rolsky's DateTime module, Eugene van der Pijll's
DateTime::Calendar::Pataphysical module and my prior
Date::Convert::French_Rev module.
The development of this module is hosted by Les Mongueurs de
Perl, <http://www.mongueurs.net/>.
Many thanks to those who sent me a RT ticket or a pull request:
- The late Iain Truskett,
- Philippe Bruhat (BooK)
- Slaven Rezić
- and especially Gérald Sédrati-Dinet (GIBUS at cpan dot org),
for his thorough documentation research and for his work on the Spanish
and Italian locales.
Also, many thanks to all the persons who gave me advices on the
DateTime mailing list. I will not mention them, because I might forget some
of them.
date(1), strftime(3), perl(1)
DateTime
DateTime::Calendar::Pataphysical
Date::Convert::French_Rev or
<https://github.com/jforget/Date-Convert-French_Rev>
Date::Converter
calendar/cal-french.el in emacs-21.2 or later or xemacs 21.1.8, forked in
<https://github.com/jforget/emacs-lisp-cal-french>
Quid 2001, M and D Frémy, publ. Robert Laffont
Agenda Républicain 197 (1988/89), publ. Syros
Alternatives
Any French schoolbook about the French Revolution
The French Revolution, Thomas Carlyle, Oxford University Press
Calendrier Militaire, anonymous
Histoire de l'heure en France, Jacques Gapaillard, publ. Vuibert
-- ADAPT
<https://github.com/houseabsolute/DateTime.pm/wiki>
<http://www.faqs.org/faqs/calendars/faq/part3/>
<https://zapatopi.net/metrictime/>
<http://datetime.mongueurs.net/>
<https://www.allhotelscalifornia.com/kokogiakcom/frc/default.asp>
<https://github.com/jhbadger/FrenchRevCal-ruby>
<https://en.wikipedia.org/wiki/French_Republican_Calendar>
<https://fr.wikipedia.org/wiki/Calendrier_républicain>
<https://archive.org/details/decretdelaconven00fran_40>
"Décret du 4 frimaire, an II (24 novembre 1793) sur
l'ère, le commencement et l'organisation de l'année et sur les
noms des jours et des mois"
<https://archive.org/details/decretdelaconven00fran_41>
Same text, with a slightly different typography.
<https://purl.stanford.edu/dx068ky1531>
"Archives parlementaires de 1789 à 1860: recueil
complet des débats législatifs & politiques des Chambres
françaises", J. Madival and E. Laurent, et. al., eds, Librairie
administrative de P. Dupont, Paris, 1912.
Starting with page 6, this document includes the same text as the
previous links, with a much improved typography. Especially, all the
"long s" letters have been replaced by short s. Also interesting
is the text following the decree, page 21 and following: "Annuaire ou
calendrier pour la seconde année de la République
française, annexe du décret du 4 frimaire, an II (24 novembre
1793) sur l'ère, le commencement et l'organisation de l'année
et sur les noms des jours et des mois". In the remarks above, it is
refered as [Annexe].
<https://gallica.bnf.fr/ark:/12148/bpt6k48746z>
[Fabre] "Rapport fait à la Convention nationale dans
la séance du 3 du second mois de la seconde année de la
République française, au nom de la Commission chargée
de la confection du calendrier", Philippe-François-Nazaire Fabre
d'Églantine, Imprimerie nationale, Paris, 1793
<https://gallica.bnf.fr/ark:/12148/bpt6k49016b>
[Annuaire] "Annuaire du cultivateur, pour la troisième
année de la République : présenté le 30
pluviôse de l'an II à la Convention nationale, qui en a
décrété l'impression et l'envoi, pour servir aux
écoles de la République", Gilbert Romme, Imprimerie
nationale des lois, Paris, 1794-1795
<https://gallica.bnf.fr/ark:/12148/bpt6k43978x>
"Calendrier militaire, ou tableau sommaire des victoires
remportées par les Armées de la République
française, depuis sa fondation (22 septembre 1792), jusqu'au 9
floréal an 7, époque de la rupture du Congrès de
Rastadt et de la reprise des hostilités" Moutardier, Paris, An
VIII de la République française. The source of the
"on_date" method.
Copyright (c) 2003, 2004, 2010, 2012, 2014, 2016, 2019, 2021 Jean Forget. All
rights reserved. This program is free software. You can distribute, adapt,
modify, and otherwise mangle the DateTime::Calendar::FrenchRevolutionary
module under the same terms as perl 5.16.3.
This program is distributed under the same terms as Perl 5.16.3:
GNU Public License version 1 or later and Perl Artistic License
You can find the text of the licenses in the LICENSE file
or at <https://dev.perl.org/licenses/artistic.html> and
<https://www.gnu.org/licenses/gpl-1.0.html>.
Here is the summary of GPL:
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 1, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see <https://www.gnu.org/licenses/>
or contact the Free Software Foundation, Inc.,
<https://www.fsf.org>.
Visit the GSP FreeBSD Man Page Interface. Output converted with ManDoc. |