Home

Search this site:
 

Horshack’s
very
own site

 

This is Bavaria, Germany!
You will find links to Perl,
bootdisks for system administration,
a lot of Linux,
Windows administration
and some personal belongings.

Solving Dateproblems in Perl

Getting today's date in the usual german dd.mm.yyyy and hh:mm:ss

#!/usr/bin/perl
use Date::Calc qw/:all/;
use strict;
use warnings;

my $date = '12.07.2004';
printf "Weekday for '%s' is '%s'\n", $date, &german_weekday($date);

=head2 german_weekday

        "Montag" = german_weekday('12.07.2004');

=cut

sub german_weekday {
    my $date = shift || die "must get date";

    # Return date in german language
    Language( Decode_Language("de") );
    my ( $d, $m, $y ) = split /\./, $date;

    my $wday = Day_of_Week_to_Text( Day_of_Week( $y, $m, $d ) );

    return $wday;
}

Getting a date plus x days

use Date::Calc;
[...]

sub date_plus_x_days {
    # first_day = dd.mm.yyyy (german format)
    # return the date in dd.mm.yyyy
    my ( $first_day, $plus_days ) = @_;
    $first_day =~ /^(\d+).(\d+).(\d+)$/;
    my ( $d, $m, $y ) = ( $1, $2, $3 );
    my ( $y2, $m2, $d2 ) = Date::Calc::Add_Delta_Days( $y, $m, $d, $plus_days );
    return sprintf( "%02d.%02d.%04d", $d2, $m2, $y2 );
}

German long date like "6. Januar 2005"

use Date::Calc;

...

=head2 german_long_date

        "6. Januar 2006" = german_long_date(2000,1,6);

        Get today's date when omitting numbers:

        "10. Januar 2006" = german_long_date();

=cut

sub german_long_date {
    my ( $y, $m, $d ) = @_;
    unless ( defined $y || defined $m || defined $d ) {
        ( $y, $m, $d ) = Date::Calc::Today;
    }
    Date::Calc::Language( Date::Calc::Decode_Language("de") );
    return sprintf "%d. %s %d", $d, Date::Calc::Month_to_Text($m), $y;
}
Impressum