package DateTime::Format::Czech; 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';