view release on metacpan or search on metacpan
- Add the %{method} specifier for strftime
- In the Locale::xx modules, add some methods for compatibility with
DateTime::Locale: month_names, am_pms, day_names, full_date_format, etc.
- Still more propaganda in the on_date method
- Insert empty lines in the on_date method, so the today example script
can now wrap the text
- The "ce_jour" method is removed, use the "on_date" method with
a parameter set to "fr" instead.
- Check the few possible values for the locale and the time-zone.
- Add a few tests.
- The eg/result directory contains the year 213 calendar now.
INCOMPATIBLE CHANGES
- The decimal equivalent of the 1..12 clock is the 1..10 clock,
not 1..5. This is because it represents the numbers printed on clockfaces.
- The decade method returns a 2-element list, just like DateTime's
week method. And by the way, the decade method is aliased to week.
0.06 Septidi 27 Frimaire CCXII, jour du liège (Wednesday 2003-12-17)
- add test for nanoseconds... and fixed nanosecond related bug
- add basic support for Locale, with two languages: French and English
- add much more shameless propaganda for the French Revolutionary armies
0.05 Décadi 30 Fructidor CCXI, jour du panier (Tuesday 2003-09-16)
- removed the reference to Makefile.PL in README
- pod fixes thanks to Iain Truskett
- add minimal support for nanoseconds (so conversion Greg â FR â Greg will not
lose the precision)
- add much stuff for the events that occurred in Vendémiaire
- replace the CCXI calendars by CCXII calendars in the eg/result directory.
0.04 Primidi 11 Thermidor CCXI, jour du panis (Tuesday 2003-07-29)
- the _offset_from_local_time was unduly commented out. Fixed.
- removed Makefile.PL. Or rather, replaced by a file suggesting that
the user adopts Module::Build instead of ExtUtils::MakeMaker.
0.03 Primidi 11 Floréal CCXI, jour de la rhubarbe (Wednesday 2003-04-30)
- I had forgotten the Roman.pm prerequisite in Makefile.PL. Fixed.
- A few words about Roman.pm in README, too.
{
"abstract" : "Converting dates to or from the French Revolutionary calendar",
"author" : [
"Jean Forget <JFORGET@cpan.org>"
],
"dynamic_config" : 0,
"generated_by" : "ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010",
"license" : [
"perl_5"
],
"meta-spec" : {
"url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
---
abstract: 'Converting dates to or from the French Revolutionary calendar'
author:
- 'Jean Forget <JFORGET@cpan.org>'
build_requires:
ExtUtils::MakeMaker: '0'
List::Util: '1.33'
Test::More: '0'
strict: '0'
warnings: '0'
configure_requires:
ExtUtils::MakeMaker: '0'
Makefile.PL view on Meta::CPAN
# 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, contact the Free Software Foundation,
# Inc., <https://www.fsf.org/>.
#
use strict;
use ExtUtils::MakeMaker;
WriteMakefile
(
'ABSTRACT' => 'Converting dates to or from the French Revolutionary calendar',
'PL_FILES' => {},
'INSTALLDIRS' => 'site',
'NAME' => 'DateTime::Calendar::FrenchRevolutionary',
'EXE_FILES' => [],
'VERSION_FROM' => 'lib/DateTime/Calendar/FrenchRevolutionary.pm',
'PREREQ_PM' => {
'Test::More' => 0,
'DateTime' => 0.14,
'Roman' => 1.22,
'Params::Validate' => 0,
DateTime::Calendar::FrenchRevolutionary version 0.17
====================================================
DateTime::Calendar::FrenchRevolutionary is copyright (c) 2003,
2004, 2010, 2011, 2012, 2014, 2016, 2019, 2021 Jean Forget
This is a companion module to DateTime.pm. It implements the French
Revolutionary calendar and decimal time.
INSTALLATION
The simplest way, of course, is using a CPAN client: CPAN.pm, cpanp
(from CPANPLUS.pm) or cpanm (from App::cpanminus).
If you downloaded the .tar.gz archive, or if you cloned the git repo
with
git clone https://github.com/jforget/DateTime-Calendar-FrenchRevolutionary.git
This directory contains a few examples of program using the French
Revolutionary calendar module. There are:
today -- the name says it all. Typically called from your .profile.
prt_cal -- to generate a HTML file, containing the calendar for a given
French Revolutionary year.
g2r_table -- to generate a HTML file, which will give a few tables to
convert a Gredorian date into a French Revolutionary date. The
instructions for use are included.
r2g_table -- the opposite of g2r_table.
labels_* -- auxiliary files, used by prt_cal, g2r_table and r2g_table,
for language-dependant values, especially the instructions for use.
eg/g2r_table view on Meta::CPAN
$_ = eval "qq($labels{usage2})";
print;
}
__END__
=encoding utf8
=head1 NAME
g2r_table - Print a few charts which can be used to convert a date from the Gregorian calendar to the French Revolutionary calendar.
=head1 SYNOPSIS
g2r_table [--columns=I<number>] [--example=I<date>] [--lang=I<language>] [--table-workaround]
=head1 DESCRIPTION
This program prints five tables, plus a small text showing how to use
these tables. The output uses UTF-8 encoding and HTML format. When
printed from a table-aware web browser, these tables allow a
computer-less user to convert dates from the Gregorian calendar to the
French Revolutionary calendar.
=head1 OPTIONS
=over 4
=item columns
The number of columns in the first table. This number must be a
multiple of 4 (because of the 4-year quasi-cycle for leap days) plus
one (for the first line, giving year intervals). So you can choose 5,
eg/labels_en view on Meta::CPAN
# Inc., <https://www.fsf.org/>.
#
#
# The labels hash, under an assumed name
#
use utf8;
use strict;
use warnings;
my %labels =
( calendar => 'Calendar'
, month3 => [ qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) ]
, week1 => [ qw(M T W T F S S) ]
, add_days => 'Additional Days'
, month => [ qw(January February March April May June July August September
October November December) ]
, title1 => "Year to letter"
, title2 => { b => "Beginning of Year", m => "Middle of Year", e => "End of Year" }
, title3 => "Month names and day names"
, year_ttl => "Year"
, titleg2r => "Converting dates from Gregorian to French Revolutionary"
eg/labels_fr view on Meta::CPAN
# along with this program; if not, contact the Free Software Foundation,
# Inc., <https://www.fsf.org/>.
#
# Le hachage des libellés
#
use utf8;
use strict;
use warnings;
my %labels =
( calendar => 'Calendrier'
, month3 => [ qw(jan fév mars avr mai juin juil août sep oct nov déc) ]
, week1 => [ qw(L M M J V S D) ]
, add_days => 'Jours complémentaires'
, month => [ qw(Janvier Février Mars Avril Mai Juin Juillet Août Septembre
Octobre Novembre Décembre) ]
, title1 => "Lettres pour une année"
, title2 => { b => "Début d'année", m => "Milieu d'année", e => "Fin d'année" }
, title3 => "Nom des mois et des jours"
, year_ttl => "Année"
, titleg2r => "Conversion de dates du calendrier grégorien vers le calendrier républicain"
#!/usr/local/bin/perl -w
#
# Example script for DateTime::Calendar::FrenchRevolutionary:
# print a French Revolutionary calendar
# Copyright (C) 2003, 2004, 2010, 2011, 2014, 2016, 2019, 2021 Jean Forget. All rights reserved.
#
# See the license in the embedded documentation below.
#
use utf8;
use strict;
use DateTime::Calendar::FrenchRevolutionary;
use Getopt::Long;
use Roman;
use FindBin;
sub prt_cal {
my $year = $_[0]; # French revolutionary year
my $year_1 = $year + 1791; # first corresponding Gregorian year
my $year_2 = $year + 1792; # second corresponding Gregorian year
# HTML header
print <<"EOT";
<html>
<head><title>$labels{calendar}</title>
<meta http-equiv='content-type' content='Text/html; charset=utf-8' />
</head>
<body>
EOT
print qq(<p align='center'><img src='$pict'>\n) if $pict;
# Column headers for the first six months
print <<"EOT";
<h2 align='center'>@{[ Roman $year ]}</h2>
<h3 align='center'>$year_1-$year_2</h3>
<table border width='90%'>
my $date_g = DateTime->from_object(object => $date_r);
sprintf "%2d (%s %2d)", $rd, $labels{week1}[$date_g->day_of_week_0], $date_g->day;
}
__END__
=encoding utf8
=head1 NAME
prt_cal -- print a French Revolutionary calendar
=head1 SYNOPSIS
prt_cal [--lang=I<language>] [--kitten=I<file>] year
=head1 DESCRIPTION
This program prints a calendar, using the French Revolutionary
calendar. It is not limited to the historical period when this
calendar was in use, you can ask for any year after its beginning. For
example, you can print the calendar for the year 211, which
corresponds to 2002-2003 in the Gregorian calendar. The output is in
HTML, and contains brief indications for which Gregorian date
corresponds to each French Revolutionary date.
=head1 OPTIONS
=over 4
=item language
Some values are language dependant: Gregorian weekday initials,
English (default)
=item fr
French
=back
=item kitten
In France, traditionnally, the postal service sells calendars for the
next year during November / December. These calendars usually have the
picture of one or more kittens in a basket, or a mountainous
landscape. So, you can do the same with this program, by specifying a
JPEG or GIF URL, which contains the photo of kittens or a picture of
mountains. Don't even think of using anything else, especially
pictures involving scantily clad ladies.
You can try
https://images.google.com/images?hl=en&lr=&ie=ISO-8859-1&output=search&q=kitten+basket
https://images.google.com/images?hl=en&lr=&ie=ISO-8859-1&output=search&q=mountains
but do not even think about
https://images.google.com/images?q=Delacroix+libert%C3%A9+guidant+peuple&hl=en&lr=&ie=UTF-8&output=search
=back
=head1 PARAMETERS
There is a single parameter, the year, according to the French
Revolutionary calendar. This parameter is numeric (Roman number not
permitted).
=head1 KNOWN BUGS
If given several years, the program prints all the requested calendars
on standard output as a single stream. There are HTML delimiters for
each, but they are concatenated.
=head1 AUTHOR
Jean Forget <JFORGET@cpan.org>
=head1 LICENSE STUFF
Copyright (c) 2003, 2004, 2010, 2012, 2014, 2016, 2019, 2021 Jean
eg/r2g_table view on Meta::CPAN
$_ = eval "qq($labels{usage4})";
print;
}
__END__
=encoding utf8
=head1 NAME
r2g_table - Print a few charts which can be used to convert a date from the French Revolutionary calendar to the Gregorian calendar.
=head1 SYNOPSIS
r2g_table [--columns=I<nb>] [--example=I<date>] [--lang=I<language>] [--table-workaround]
=head1 DESCRIPTION
This program prints three tables, plus a small text showing how to use
these tables. The output uses UTF-8 encoding and HTML format. When
printed from a table-aware web browser, these tables allow a
computer-less user to convert dates from the French Revolutionary
calendar to the Gregorian calendar.
=head1 OPTIONS
=over 4
=item columns
The number of columns in the the first table. This must be a multiple
of 4, plus 1. With 5, you get a narrow table with many lines, while
with 13 or even 17, you get a wide table with fewer lines.
#!/usr/local/bin/perl -w
#
# Example script for DateTime::Calendar::FrenchRevolutionary:
# display the current date in various calendars
#
# Copyright (C) 2003, 2004, 2010, 2011, 2012, 2014, 2016, 2019, 2021 Jean Forget, all rights reserved
#
# 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 F<LICENSE> file or at
# L<https://dev.perl.org/licenses/artistic.html>
# and L<https://www.gnu.org/licenses/gpl-1.0.html>.
#
# Check the shebang line and then just call this script from your .profile
use strict;
use DateTime;
use Text::Wrap;
$Text::Wrap::columns = 80; # or whatever your console likes
# or else, read recipe 1.17 from Perl Cookbook (2d ed)
my $dg = DateTime->now;
print "\nGregorian calendar\n";
print $dg->iso8601, $dg->strftime(", %A %d %B %Y%n");
print "JD : ", $dg->jd, " MJD : ", $dg->mjd, "\n";
eval 'use DateTime::Calendar::Julian';
unless ($@) {
my $d = DateTime::Calendar::Julian->now;
print "\nJulian calendar\n";
print $d->iso8601, $d->strftime(", %A %d %B %Y%n");
}
eval 'use DateTime::Calendar::Mayan';
unless ($@) {
my $d = DateTime::Calendar::Mayan->now;
print "\nMayan calendar\n";
print $d->bktuk, " (baktun, katun, tun, uinal, kin)\n";
}
eval 'use DateTime::Calendar::FrenchRevolutionary';
unless ($@) {
my $dr = DateTime::Calendar::FrenchRevolutionary->now;
print "\nFrench Revolution\n";
print $dr->iso8601, $dr->strftime(", %A %d %B %EY, %Ej%n"); # in French
(my $text = fill('', '', $dr->on_date('en'))) =~ s/\n\n+/\n/g;
print $text; # in English
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
# -*- encoding: utf-8; indent-tabs-mode: nil -*-
#
# Perl DateTime extension for converting to/from the French Revolutionary calendar
# Copyright (c) 2003, 2004, 2010, 2011, 2012, 2014, 2016, 2019, 2021 Jean Forget. All rights reserved.
#
# See the license in the embedded documentation below.
#
package DateTime::Calendar::FrenchRevolutionary;
use utf8;
use strict;
use warnings;
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
my $new_dt = (ref $self)->new( %old_p, %p );
%$self = %$new_dt;
return $self;
}
sub set_time_zone { } # do nothing, only 'floating' allowed
# Internal functions
use constant REV_BEGINNING => 654415; # RD value for 1 Vendémiaire I in the Revolutionary calendar
use constant NORMAL_YEAR => 365;
use constant LEAP_YEAR => 366;
use constant FOUR_YEARS => 4 * NORMAL_YEAR + 1; # one leap year every four years
use constant CENTURY => 25 * FOUR_YEARS - 1; # centuries aren't leap years...
use constant FOUR_CENTURIES => 4 * CENTURY + 1; # ...except every four centuries that are.
use constant FOUR_MILLENIA => 10 * FOUR_CENTURIES - 1; # ...except every four millenia that are not.
# number of days between the start of the revolutionary calendar, and the
# beginning of year n - 1 as long as the equinox rule is in effect
my @YEARS_BEGINS= (0, 365, 730, 1096, 1461, 1826, 2191, 2557, 2922, 3287, 3652,
4018, 4383, 4748, 5113, 5479, 5844);
sub _is_leap_year {
my ($self, $year) = @_;
# Autumn equinox from I to XIX
return 1 if ($year == 3) or ($year == 7) or ($year == 11) or ($year == 15);
return 0 if ($year < 20);
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
$y += $x * 100;
$doy -= $x * CENTURY;
$x = int ($doy / FOUR_YEARS);
$y += $x * 4;
$doy -= $x * FOUR_YEARS;
$x = int ($doy / NORMAL_YEAR);
# The integer division above divides the 4-year period, 1461 days,
# into 5 parts: 365, 365, 365, 365 and 1. This mathematically sound operation
# is wrong with respect to the calendar, which needs to divide
# into 4 parts: 365, 365, 365 and 366. Therefore the adjustment below.
$x = 3 if $x == 4; # last day of the 4-year period
$y += $x;
$doy -= $x * NORMAL_YEAR;
++$y; # because of 0-based mathematics vs 1-based chronology
++$doy;
}
my $d = $doy % 30 || 30;
my $m = ($doy - $d) / 30 + 1;
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
The documentation uses the word I<décade> (the first "e" having an
acute accent). This French word is I<not> the translation of the
English word "decade" (ten-year period). It means a ten-I<day>
period.
For your information, the French word for a ten-year period is
I<décennie>.
=head2 Description
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 I<The French Revolution>, the XIXth century writer Thomas
Carlyle proposes these translations for the month names:
=over 4
=item Vendémiaire -> Vintagearious
=item Brumaire -> Fogarious
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
Fructidor. These days are called I<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.
=head1 METHODS
Since the week has been replaced by the décade, the corresponding
method names still are C<decade_number>, C<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 C<abt_hour>, C<abt_minute>,
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
Only the values C<fr> (French), C<en> (English), C<es> (Spanish) and
C<it> (Italian) are allowed. Default is French. No other values are
possible, even territory variants such as C<fr_BE> or C<en_US>.
=back
=item * 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.
=item * now( )
Creates a date object that corresponds to the precise instant the
method is called.
=item * from_object( object => $object, ... )
Creates a date object by converting another object from the DateTime
suite. The preferred way for calendar to calendar conversion.
=item * last_day_of_month( ... )
Same as C<new>, except that the C<day> parameter is forbidden and is
automatically set to the end of the month. If the C<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.
=item * clone
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
=item * hms
Returns a composite string with the three time elements. Uses the
decimal time. An optional parameter allows you to choose the
separator (C<:> by default).
=item * iso8601
Returns the date and time is a format similar to what ISO-8601 has
specified for the Gregorian calendar.
=item * is_leap_year
Returns a true value if the year is a leap year, false else.
=item * decade_number, week_number
Returns the I<décade> number. C<%U>, C<%V> or C<%W> in C<strftime>.
=item * decade, week
Returns a 2-element list, with the year number and the décade number.
Since the I<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 C<week> method.
=item * 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.
=item * 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.
=item * utc_rd_as_seconds
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
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.
=item * 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.
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
The month as a decimal number (1 to 13). Unlike %m, a leading zero is
replaced by a space.
=item * %F
Equivalent to %Y-%m-%d (the ISO 8601 date format)
=item * %g
Strictly similar to %y, since I<décades> are always aligned with the
beginning of the year in this calendar.
=item * %G
Strictly similar to %Y, since I<décades> are always aligned with the
beginning of the year in this calendar.
=item * %h
Equivalent to %b.
=item * %H
The hour as a decimal number using a 10-hour clock (range 0 to 9).
The result is a single-char string.
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
The year as a decimal number including the century.
=item * %Ey
The year as a lowercase Roman number.
=item * %EY
The year as a uppercase Roman number, which is the traditional way to
write years when using the French Revolutionary calendar.
=item * %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?
=item * %Z
The time zone or name or abbreviation, should the module have
supported them.
=item * %*
The feast for the day, in long format ("jour de la pomme de terre").
Also available as %Ej.
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
=back
=head1 PROBLEMS AND KNOWN BUGS
=head2 Time Zones
Only the I<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.
=head2 Leap Seconds
They are not supported.
=head2 I18N
For the moment, only French, English, Spanish and Italian are
available. For the English translation, I have used Thomas Carlyle's
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
=head2 Feasts
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.
=head1 SUPPORT
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
L<DateTime>
L<DateTime::Calendar::Pataphysical>
L<Date::Convert::French_Rev> or L<https://github.com/jforget/Date-Convert-French_Rev>
L<Date::Converter>
=head2 Other Software
F<calendar/cal-french.el> in emacs-21.2 or later or xemacs 21.1.8,
forked in L<https://github.com/jforget/emacs-lisp-cal-french>
=head2 Books
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
=head2 Internet
L<https://github.com/houseabsolute/DateTime.pm/wiki>
L<http://www.faqs.org/faqs/calendars/faq/part3/>
L<https://zapatopi.net/metrictime/>
L<http://datetime.mongueurs.net/>
L<https://www.allhotelscalifornia.com/kokogiakcom/frc/default.asp>
L<https://github.com/jhbadger/FrenchRevCal-ruby>
L<https://en.wikipedia.org/wiki/French_Republican_Calendar>
lib/DateTime/Calendar/FrenchRevolutionary/Locale.pm view on Meta::CPAN
# -*- encoding: utf-8; indent-tabs-mode: nil -*-
#
# Perl DateTime extension for providing localised strings for the French Revolutionary calendar
# Copyright (c) 2003, 2004, 2010, 2011, 2014, 2016, 2019, 2021 Jean Forget. All rights reserved.
#
# See the license in the embedded documentation below.
#
package DateTime::Calendar::FrenchRevolutionary::Locale;
use utf8;
use strict;
use warnings;
lib/DateTime/Calendar/FrenchRevolutionary/Locale/en.pm view on Meta::CPAN
# -*- encoding: utf-8; indent-tabs-mode: nil -*-
#
# Perl DateTime extension for providing English strings for the French Revolutionary calendar
# Copyright (c) 2003, 2004, 2010, 2011, 2014, 2016, 2019, 2021 Jean Forget. All rights reserved.
#
# See the license in the embedded documentation below.
#
package DateTime::Calendar::FrenchRevolutionary::Locale::en;
use utf8;
use strict;
use warnings;
lib/DateTime/Calendar/FrenchRevolutionary/Locale/en.pm view on Meta::CPAN
# But this module is a revolutionary one, so it discards all old traditions.
"Ah ! ça ira ! ça ira !";
__END__
=encoding utf8
=head1 NAME
DateTime::Calendar::FrenchRevolutionary::Locale::en -- English localization for the French
revolutionary calendar.
=head1 SYNOPSIS
use DateTime::Calendar::FrenchRevolutionary::Locale;
my $english_locale = DateTime::Calendar::FrenchRevolutionary::Locale->load('en');
my $english_month_name =$english_locale->month_name($date);
=head1 DESCRIPTION
lib/DateTime/Calendar/FrenchRevolutionary/Locale/en.pm view on Meta::CPAN
This module provides the following class methods:
=over 4
=item * new
Returns an object instance, which is just a convenient value to be
stored in a variable.
Contrary to the widely used Gregorian calendar, there is no need to
customize a French Revolutionary calendar locale. Therefore, there are
no instance data and no instance methods.
=item * month_name ($date)
Returns an English translation for C<$date>'s month, where C<$date> is
a C<DateTime::Calendar::FrenchRevolutionary> object.
=item * month_abbreviation ($date)
Returns a 3-letter abbreviation for the English month name.
lib/DateTime/Calendar/FrenchRevolutionary/Locale/en.pm view on Meta::CPAN
animal or tool that correspond to C<$date>'s feast.
Note: in some cases, the feast French name is left untranslated, while
in some other cases, the translation is inadequate. If you are fluent
in both French and English, do not hesitate to send corrections to the
author.
=item * feast_long ($date)
Same as C<feast_short>, with a "day" suffix, as in the current
calendar's "groundhog day" or "Colombus day".
=item * feast_caps ($date)
Same as C<feast_long> with capitalized first letters.
=item * on_date ($date)
Gives a small text about the events which occurred the same month and
day as C<$date> between the calendar's epoch (22 Sep 1792) and the day
it was rescinded (31 Dec 1805).
Most of these events come from an anonymous propaganda book published
in year VIII (1799--1800). The others are common knowledge available
in any French History book or any encyclopedia.
=item * full_date_format, long_date_format, medium_date_format, short_date_format
Class methods, giving four C<strftime> canned formats for dates,
without the need to remember all the C<%> specifiers.
lib/DateTime/Calendar/FrenchRevolutionary/Locale/es.pm view on Meta::CPAN
# -*- encoding: utf-8; indent-tabs-mode: nil -*-
#
# Perl DateTime extension for providing Spanish strings for the French Revolutionary calendar
# Copyright (c) 2021 Jean Forget. All rights reserved.
#
# See the license in the embedded documentation below.
#
package DateTime::Calendar::FrenchRevolutionary::Locale::es;
use utf8;
use strict;
use warnings;
lib/DateTime/Calendar/FrenchRevolutionary/Locale/es.pm view on Meta::CPAN
# But this module is a revolutionary one, so it discards all old traditions.
"Ah ! ça ira ! ça ira !";
__END__
=encoding utf8
=head1 NAME
DateTime::Calendar::FrenchRevolutionary::Locale::es -- Spanish localization for the French
revolutionary calendar.
=head1 SYNOPSIS
use DateTime::Calendar::FrenchRevolutionary::Locale;
my $spanish_locale = DateTime::Calendar::FrenchRevolutionary::Locale->load('es');
my $spanish_month_name =$spanish_locale->month_name($date);
=head1 DESCRIPTION
lib/DateTime/Calendar/FrenchRevolutionary/Locale/es.pm view on Meta::CPAN
This module provides the following class methods:
=over 4
=item * new
Returns an object instance, which is just a convenient value to be
stored in a variable.
Contrary to the widely used Gregorian calendar, there is no need to
customize a French Revolutionary calendar locale. Therefore, there are
no instance data and no instance methods.
=item * month_name ($date)
Returns an Spanish translation for C<$date>'s month, where C<$date> is
a C<DateTime::Calendar::FrenchRevolutionary> object.
=item * month_abbreviation ($date)
Returns a 3-letter abbreviation for the Spanish month name.
lib/DateTime/Calendar/FrenchRevolutionary/Locale/fr.pm view on Meta::CPAN
# -*- encoding: utf-8; indent-tabs-mode: nil -*-
#
# Perl DateTime extension for providing French strings for the French Revolutionary calendar
# Copyright (c) 2003, 2004, 2010, 2011, 2014, 2016, 2019, 2021 Jean Forget. All rights reserved.
#
# See the license in the embedded documentation below.
#
package DateTime::Calendar::FrenchRevolutionary::Locale::fr;
use utf8;
use strict;
use warnings;
lib/DateTime/Calendar/FrenchRevolutionary/Locale/fr.pm view on Meta::CPAN
# But this module is a revolutionary one, so it discards all old traditions.
"Dansons la carmagnole, vive le son du canon.";
__END__
=encoding utf8
=head1 NAME
DateTime::Calendar::FrenchRevolutionary::Locale::fr -- French localization for the French
revolutionary calendar.
=head1 SYNOPSIS
use DateTime::Calendar::FrenchRevolutionary::Locale;
my $french_locale = DateTime::Calendar::FrenchRevolutionary::Locale->load('fr');
my $french_month_name =$french_locale->month_name($date);
=head1 DESCRIPTION
lib/DateTime/Calendar/FrenchRevolutionary/Locale/fr.pm view on Meta::CPAN
This module provides the following class methods:
=over 4
=item * new
Returns an object instance, which is just a convenient value to be
stored in a variable.
Contrary to the widely used Gregorian calendar, there is no need to
customize a French Revolutionary calendar locale. Therefore, there are
no instance data and no instance methods.
=item * month_name ($date)
Returns the French name for C<$date>'s month, where C<$date> is a
C<DateTime::Calendar::FrenchRevolutionary> object.
=item * month_abbreviation ($date)
Returns a 3-letter abbreviation for the French month name.
lib/DateTime/Calendar/FrenchRevolutionary/Locale/fr.pm view on Meta::CPAN
Same as C<feast_short>, with a "jour" prefix.
=item * feast_caps ($date)
Same as C<feast_long> with capitalized first letters.
=item * on_date ($date)
Gives a small text about the events which occurred the same month and
day as C<$date> between the calendar's epoch (22 Sep 1792) and the day
it was rescinded (31 Dec 1805).
Most of these events come from an anonymous propaganda book published
in year VIII (1799--1800). The others are common knowledge available
in any French History book or any encyclopedia.
=item * full_date_format, long_date_format, medium_date_format, short_date_format
Class methods, giving four C<strftime> canned formats for dates,
without the need to remember all the C<%> specifiers.
lib/DateTime/Calendar/FrenchRevolutionary/Locale/it.pm view on Meta::CPAN
# -*- encoding: utf-8; indent-tabs-mode: nil -*-
#
# Perl DateTime extension for providing Italian strings for the French Revolutionary calendar
# Copyright (c) 2021 Jean Forget. All rights reserved.
#
# See the license in the embedded documentation below.
#
package DateTime::Calendar::FrenchRevolutionary::Locale::it;
use utf8;
use strict;
use warnings;
lib/DateTime/Calendar/FrenchRevolutionary/Locale/it.pm view on Meta::CPAN
# But this module is a revolutionary one, so it discards all old traditions.
"Ah ! ça ira ! ça ira !";
__END__
=encoding utf8
=head1 NAME
DateTime::Calendar::FrenchRevolutionary::Locale::it -- Italian localization for the French
revolutionary calendar.
=head1 SYNOPSIS
use DateTime::Calendar::FrenchRevolutionary::Locale;
my $italian_locale = DateTime::Calendar::FrenchRevolutionary::Locale->load('it');
my $italian_month_name =$italian_locale->month_name($date);
=head1 DESCRIPTION
lib/DateTime/Calendar/FrenchRevolutionary/Locale/it.pm view on Meta::CPAN
This module provides the following class methods:
=over 4
=item * new
Returns an object instance, which is just a convenient value to be
stored in a variable.
Contrary to the widely used Gregorian calendar, there is no need to
customize a French Revolutionary calendar locale. Therefore, there are
no instance data and no instance methods.
=item * month_name ($date)
Returns an Italian translation for C<$date>'s month, where C<$date> is
a C<DateTime::Calendar::FrenchRevolutionary> object.
=item * month_abbreviation ($date)
Returns a 3-letter abbreviation for the Italian month name.