Perl :: Aufgabe #53 :: Lösung #3
3 Lösungen
#53
Bei Addition von Tage nur Werktage beachten
Anfänger - Perl
von Gustl
- 22.07.2013 um 11:04 Uhr
Schreibe ein Programm welches die Anzahl der addierenden Tage abfrägt und dann das Datum ausgibt.
Bei der Addition der Tage sollen aber nur die Werktage (Geschäftstage): Montag, Dienstag, Mittwoch, Donnerstag und Freitag beachtet werden.
Beispiel: Heute ist der 22.07. (Montag), wenn ich nun 7 Tage eingebe soll der 31.07. (Mittwoch) ausgegeben werden.
Bei der Addition der Tage sollen aber nur die Werktage (Geschäftstage): Montag, Dienstag, Mittwoch, Donnerstag und Freitag beachtet werden.
Beispiel: Heute ist der 22.07. (Montag), wenn ich nun 7 Tage eingebe soll der 31.07. (Mittwoch) ausgegeben werden.
#3
von Gustl (6560 Punkte)
- 22.07.2013 um 14:48 Uhr
Hier noch eine Lösung von dem User Linuxer aus dem deutschsprachigen Perl-Forum, wobei DateTime mit Methoden erweitert wird.
Perl-Code
#! /usr/bin/perl
use strict;
use warnings;
use DateTime;
# Quick-Hacked: extend DateTime to set/check for business days
{
# default setting: 1-5 (Mo-Fr) are business days
my %business_days;
@business_days{1..5} = (1)x5;
# Method to define business days
sub DateTime::set_business_days {
my $self = shift;
%business_days = ();
$business_days{$_} = 1 for @_;
}
# Method if given wday is a business day
sub DateTime::is_business_day {
my $self = shift;
my $wday = $self->wday;
return 1 if $business_days{$wday};
return 0;
}
}
my $day1 = DateTime->now( time_zone => 'Europe/Berlin' );
$day1->set_business_days( 1 .. 5 );
print "Wie viele Werktage sollen addiert werden (Startdatum Heute):\t";
my $add = <STDIN>;
chomp $add;
while ( $add ) {
$day1->add( days => 1 );
my $wday = $day1->wday;
$add-- if $day1->is_business_day;
}
print $day1->ymd, $/;Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1
