Dave Cross: Still Munging Data With Perl: Online event - Mar 27 Learn more

BEGIN {
$DateTime::Format::Czech::VERSION = '0.2';
}
use utf8;
use Moose;
=encoding utf-8
=head1 SYNOPSIS
Format your DateTime values as usual in Czech. Now also
with month names, day names and less sugar!
=head1 DESCRIPTION
my $fmt = DateTime::Format::Czech->new;
my $date = DateTime->new(year => 2010, month => 6, day => 13);
say $fmt->format_datetime($date); # 13. června 2010
=head1 ATTRIBUTES
=over 4
=item B<show_time>
Include time in the output. Off by default.
=item B<show_date>
Include date in the output. On by default.
=item B<show_year>
Include year in the date output (“1. 12. 2010”). Off by default.
=item B<show_day_name>
Include day name in date output (“neděle 13. 6.”). Off by
default.
=item B<show_month_name>
Use month name instead of its number (“1. prosince 2010”).
On by default.
=item B<compound_format>
The C<sprintf> pattern used to glue the time and date parts.
The default value is C<%s v %s> (“5. 6. v 16.30”).
=back
=cut
has show_time => (is => 'ro', isa => 'Bool', default => 0);
has show_date => (is => 'ro', isa => 'Bool', default => 1);
has show_year => (is => 'ro', isa => 'Bool', default => 0);
has show_day_name => (is => 'ro', isa => 'Bool', default => 0);
has show_month_name => (is => 'ro', isa => 'Bool', default => 1);
has compound_format => (is => 'ro', isa => 'Str', default => '%s v %s');
my @MONTH_NAMES = qw/
ledna února března dubna
května června července srpna září
října listopadu prosince/;
my @DAY_NAMES = qw/
pondělí úterý středa čtvrtek
pátek sobota neděle/;
=head1 METHODS
=over 4
=item B<format_date>
Takes a L<DateTime> value, returns a string representation
of its date part.
=cut
sub format_date
{
my ($self, $date) = @_;
my $output = $self->show_month_name ?
join('. ', $date->day, $MONTH_NAMES[$date->month_0]) :
sprintf '%i. %i.', $date->day, $date->month;
$output = $DAY_NAMES[$date->wday_0] . ' ' . $output if $self->show_day_name;
$output .= ' ' . $date->year if $self->show_year;
return $output;
}
=item B<format_time>
Takes a L<DateTime> value, returns a string representation
of its time part in 24-hour time system. Minutes are zero-padded
if needed (“13.00”, “19.01”).
=cut
sub format_time
{
my ($self, $date) = @_;
return sprintf '%i.%02i', $date->hour, $date->minute;
}
=item B<format_datetime>
Formats a given L<DateTime> value, returning date and time parts
as configured by the C<show_date> and C<show_time> attributes. The
date and time parts are glued together using the C<compound_format>
pattern. You can also call this method using the shorter C<format>
name.
=back
=cut
sub format_datetime
{
my ($self, $date) = @_;
if ($self->show_time && $self->show_date) {
return sprintf $self->compound_format,
$self->format_date($date), $self->format_time($date);
}
return $self->format_date($date) if $self->show_date;
return $self->format_time($date);
}
sub format {
return shift->format_datetime(@_);
}
=head1 AUTHOR
Tomáš Znamenáček, zoul@fleuron.cz
=cut
'SDG';