From 38e08b2f3ae7b386eb22f2475077cf1c3a1711a7 Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Tue, 28 Aug 2012 12:23:08 +0200 Subject: [PATCH] Locale: Methode format_date_object zum Formatieren von DateTime-Instanzen; Doku MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Unterstützt auch Ausgabe von Stunden, Minuten, Sekunden mittels eines Parameters 'precision'. --- SL/Helper/DateTime.pm | 15 ++-- SL/Locale.pm | 159 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 169 insertions(+), 5 deletions(-) diff --git a/SL/Helper/DateTime.pm b/SL/Helper/DateTime.pm index 58fe6f879..59a100c2a 100644 --- a/SL/Helper/DateTime.pm +++ b/SL/Helper/DateTime.pm @@ -11,7 +11,9 @@ sub today_local { } sub to_lxoffice { - return $::locale->format_date(\%::myconfig, $_[0]); + my $self = shift; + my %params = (scalar(@_) == 1) && (ref($_[0]) eq 'HASH') ? %{ $_[0] } : @_; + return $::locale->format_date_object($self, %params); } sub from_lxoffice { @@ -40,16 +42,19 @@ Returns the current time with the time zone set to the local time zone. Returns the current date with the time zone set to the local time zone. -=item C +=item C -Formats the date according to the current Lx-Office user's date -format. +Formats the date and time according to the current Lx-Office user's +date format with L. -=item C +=item C Parses a date string formatted in the current Lx-Office user's date format and returns an instance of L. +Note that only dates can be parsed at the moment, not the time +component (as opposed to L). + =back =head1 AUTHOR diff --git a/SL/Locale.pm b/SL/Locale.pm index 24131378f..7c524e984 100644 --- a/SL/Locale.pm +++ b/SL/Locale.pm @@ -396,6 +396,28 @@ sub parse_date_to_object { return $yy && $mm && $dd ? DateTime->new(year => $yy, month => $mm, day => $dd) : undef; } +sub format_date_object { + my ($self, $datetime, %params) = @_; + + my $format = $::myconfig{dateformat} || 'yyyy-mm-dd'; + $format =~ s/yyyy/\%Y/; + $format =~ s/yy/\%y/; + $format =~ s/mm/\%m/; + $format =~ s/dd/\%d/; + + my $precision = $params{precision} || 'day'; + $precision =~ s/s$//; + my %precision_spec_map = ( + second => '%H:%M:%S', + minute => '%H:%M', + hour => '%H', + ); + + $format .= ' ' . $precision_spec_map{$precision} if $precision_spec_map{$precision}; + + return $datetime->strftime($format); +} + sub reformat_date { $main::lxdebug->enter_sub(2); @@ -516,3 +538,140 @@ sub get_local_time_zone { } 1; +__END__ + +=pod + +=encoding utf8 + +=head1 NAME + +Locale - Functions for dealing with locale-dependant information + +=head1 SYNOPSIS + + use Locale; + use DateTime; + + my $locale = Locale->new('de'); + my $now = DateTime->now_local; + print "Current date and time: ", $::locale->format_date_object($now, precision => 'second'), "\n"; + +=head1 OVERVIEW + +TODO: write overview + +=head1 FUNCTIONS + +=over 4 + +=item C + +TODO: Describe date + +=item C + +TODO: Describe findsub + +=item C + +TODO: Describe format_date + +=item C + +Formats the C<$datetime> object accoring to the user's locale setting. + +The parameter C can control whether or not the time +component is formatted as well: + +=over 4 + +=item * C + +Only format the year, month and day. This is also the default. + +=item * C + +Add the hour to the date. + +=item * C + +Add hour:minute to the date. + +=item * C + +Add hour:minute:second to the date. + +=back + +=item C + +TODO: Describe get_local_time_zone + +=item C + +TODO: Describe is_utf8 + +=item C + +TODO: Describe lang_to_locale + +=item C + +TODO: Describe new + +=item C + +TODO: Describe parse_date + +=item C + +TODO: Describe parse_date_to_object + +=item C + +TODO: Describe quote_special_chars + +=item C + +TODO: Describe raw_io_active + +=item C + +TODO: Describe reformat_date + +=item C + +TODO: Describe remap_special_chars + +=item C + +TODO: Describe restore_numberformat + +=item C + +TODO: Describe set_numberformat_wo_thousands_separator + +=item C + +TODO: Describe text + +=item C + +TODO: Describe unquote_special_chars + +=item C + +TODO: Describe with_raw_io + +=back + +=head1 BUGS + +Nothing here yet. + +=head1 AUTHOR + +Moritz Bunkus Em.bunkus@linet-services.deE + +=cut -- 2.20.1