init III
This commit is contained in:
247
Perl Skript template/datum.pm
Normal file
247
Perl Skript template/datum.pm
Normal file
@@ -0,0 +1,247 @@
|
||||
package datum;
|
||||
require Exporter;
|
||||
|
||||
use Date::Calc qw/Add_Delta_Days Day_of_Week/;
|
||||
|
||||
use vars qw($VERSION @ISA @EXPORT);
|
||||
$VERSION = 1.00;
|
||||
@ISA = qw(Exporter);
|
||||
###############################################################################
|
||||
@EXPORT = qw/
|
||||
find_day
|
||||
work_day
|
||||
trade_day
|
||||
business_day
|
||||
|
||||
/;
|
||||
|
||||
our $MOD_YY; # Jahr 2 stellig
|
||||
our $MOD_YYYY; # Jahr 4 stellig
|
||||
our $MOD_MM; # Monat
|
||||
our $MOD_DD; # Tag
|
||||
our $MOD_HH; # Stunde 24
|
||||
our $MOD_hh; # Stunde 12
|
||||
our $MOD_APM; # a.m. oder p.m.
|
||||
our $MOD_mm; # Minute
|
||||
our $MOD_ss; # Sekunde
|
||||
our $MOD_DST; # Daylight Saving Time
|
||||
|
||||
######## Datum Funktionen und Beispielnutzung
|
||||
#my $s = "%04s-%02s-%02s %02s(%s %s):%02s:%02s %s";
|
||||
#my $v = "YYYY,MM,DD,HH,hh,AP,mm,ss,DST";
|
||||
#my $o = 0;
|
||||
#my $d = find_day($o, "$s", "$v");
|
||||
#printf "Offset %3s, Format \"%s\", \"%s\" => %s\n", $o, $s, $v, $d;
|
||||
#$s = "%02s-%02s-%04s";
|
||||
#$v = "DD,MM, YYYY";
|
||||
#$o = -5;
|
||||
#$d = find_day($o+6, "$s", "$v");
|
||||
#printf "Offset %3s, Format \"%s\", \"%s\" => %s\n", $o, $s, $v, $d;
|
||||
#$s = "%s";
|
||||
#$v = "DST";
|
||||
#$o = 0;
|
||||
#$d = find_day($o, "$s", "$v");
|
||||
#printf "Keine " if ($d == 0);
|
||||
#print "Sommerzeit\n";
|
||||
|
||||
#our @bu = qw /25.12.2013 27.12.2013/;
|
||||
#$d = business_day(0, \@bu, "", "");
|
||||
#print "Kein " if !$d;
|
||||
#print "Arbeitstag\n";
|
||||
|
||||
#our @bu = qw /25.12.2013 27.12.2013/;
|
||||
#$s = "%02s-%02s-%04s";
|
||||
#$v = "DD,MM,YYYY";
|
||||
#$o = -4;
|
||||
#$d = business_day($o, \@bu, "$s", "$v");
|
||||
#printf "Offset %3s, Format \"%s\", \"%s\" => %s\n", $o, $s, $v, $d;
|
||||
|
||||
# Datum in den Formaten zulässig
|
||||
# DD.MM.YYYY DD.MM.YY->DD.MM.20YY DD.MM DD.MM.
|
||||
our @work = qw /24.12.13 25.12 26.12. 31.12. 01.01/;
|
||||
our @trade = qw / 25.12 26.12. 01.01/;
|
||||
|
||||
sub find_day {
|
||||
my $o=shift; # Offset .... -1 gestern, 0: heute, 1 morgen ....
|
||||
my $f=shift; # "%04s-%02s-%02s"
|
||||
my $s=shift; # "YY,MM,DD";
|
||||
|
||||
calc_var();
|
||||
#offset berechnen
|
||||
($MOD_YYYY,$MOD_MM,$MOD_DD) = Add_Delta_Days($MOD_YYYY,$MOD_MM,$MOD_DD,$o);
|
||||
$MOD_YY= $MOD_YYYY % 100;
|
||||
|
||||
my @s=replace_var($s);
|
||||
my $ret=sprintf($f, @s);
|
||||
return $ret;
|
||||
}
|
||||
|
||||
sub work_day {
|
||||
my $o=shift; # Offset .... -1 gestern, 0: heute, 1 morgen ...., Ist Offset 0: liefert Funktion 1 für Arbeitstag und 0 für keinen Arbeitstag
|
||||
my $f=shift; # "%04s-%02s-%02s"
|
||||
my $s=shift; #
|
||||
calc_var();
|
||||
|
||||
if ($o == 0) {
|
||||
if (is_work_day($MOD_YYYY,$MOD_MM,$MOD_DD)) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
my $oa = abs($o);
|
||||
my $i = 1;
|
||||
$i = -1 if ($o < 0);
|
||||
|
||||
for my $j (1 .. $oa) {
|
||||
do {
|
||||
($MOD_YYYY,$MOD_MM,$MOD_DD) = Add_Delta_Days($MOD_YYYY,$MOD_MM,$MOD_DD,$i);
|
||||
} while (!is_work_day($MOD_YYYY,$MOD_MM,$MOD_DD));
|
||||
}
|
||||
my @s=replace_var($s);
|
||||
$ret=sprintf($f,@s);
|
||||
return $ret;
|
||||
}
|
||||
|
||||
sub trade_day {
|
||||
my $o=shift; # Offset .... -1 gestern, 0: heute, 1 morgen ...., Ist Offset 0: liefert Funktion 1 für Arbeitstag und 0 für keinen Arbeitstag
|
||||
my $f=shift; # "%04s-%02s-%02s"
|
||||
my $s=shift; #
|
||||
calc_var();
|
||||
|
||||
if ($o == 0) {
|
||||
if (is_trade_day($MOD_YYYY,$MOD_MM,$MOD_DD)) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
my $oa = abs($o);
|
||||
my $i = 1;
|
||||
$i = -1 if ($o < 0);
|
||||
|
||||
for my $j (1 .. $oa) {
|
||||
do {
|
||||
($MOD_YYYY,$MOD_MM,$MOD_DD) = Add_Delta_Days($MOD_YYYY,$MOD_MM,$MOD_DD,$i);
|
||||
} while (!is_trade_day($MOD_YYYY,$MOD_MM,$MOD_DD));
|
||||
}
|
||||
my @s=replace_var($s);
|
||||
$ret=sprintf($f,@s);
|
||||
return $ret;
|
||||
}
|
||||
|
||||
sub business_day {
|
||||
my $o=shift; # Offset .... -1 gestern, 0: heute, 1 morgen ...., Ist Offset 0: liefert Funktion 1 für Arbeitstag und 0 für keinen Arbeitstag
|
||||
my $k=shift; # Array Ref, Array enthält Feiertage
|
||||
my @k=@{$k};
|
||||
my $f=shift; # "%04s-%02s-%02s"
|
||||
my $s=shift; #
|
||||
calc_var();
|
||||
|
||||
if ($o == 0) {
|
||||
if (is_business_day(\@k,$MOD_YYYY,$MOD_MM,$MOD_DD)) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
my $oa = abs($o);
|
||||
my $i = 1;
|
||||
$i = -1 if ($o < 0);
|
||||
|
||||
for my $j (1 .. $oa) {
|
||||
do {
|
||||
($MOD_YYYY,$MOD_MM,$MOD_DD) = Add_Delta_Days($MOD_YYYY,$MOD_MM,$MOD_DD,$i);
|
||||
} while (!is_business_day(\@k,$MOD_YYYY,$MOD_MM,$MOD_DD));
|
||||
}
|
||||
my @s=replace_var($s);
|
||||
$ret=sprintf($f,@s);
|
||||
return $ret;
|
||||
}
|
||||
|
||||
sub calc_var {
|
||||
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); #1388148859); # Freitag 27.12.2013 13:54 Uhr 19s
|
||||
$MOD_YYYY = $year + 1900;
|
||||
$MOD_YY = $year % 100;
|
||||
$MOD_MM = $mon + 1;
|
||||
$MOD_DD = $mday;
|
||||
$MOD_HH = $hour;
|
||||
$MOD_hh = $hour;
|
||||
$MOD_hh -= 12 if ($MOD_hh > 12);
|
||||
$MOD_mm = $min;
|
||||
$MOD_ss = $sec;
|
||||
$MOD_APM = 'a.m.';
|
||||
$MOD_APM = 'p.m.' if ($MOD_HH >= 12);
|
||||
$MOD_DST = $isdst;
|
||||
$MOD_WD = $wday;
|
||||
}
|
||||
|
||||
sub replace_var {
|
||||
my $s=shift;
|
||||
$s =~ s/\s//g;
|
||||
$s =~ s/YYYY/$MOD_YYYY/g;
|
||||
$s =~ s/YY/$MOD_YY/g;
|
||||
$s =~ s/MM/$MOD_MM/g;
|
||||
$s =~ s/DD/$MOD_DD/g;
|
||||
$s =~ s/HH/$MOD_HH/g;
|
||||
$s =~ s/hh/$MOD_hh/g;
|
||||
$s =~ s/mm/$MOD_mm/g;
|
||||
$s =~ s/ss/$MOD_ss/g;
|
||||
$s =~ s/AP/$MOD_APM/g;
|
||||
$s =~ s/DST/$MOD_DST/g;
|
||||
my @s=split /,/,$s;
|
||||
return @s;
|
||||
}
|
||||
|
||||
sub is_work_day {
|
||||
my $y=shift;
|
||||
my $m=shift;
|
||||
my $d=shift;
|
||||
my $dow = Day_of_Week($y,$m,$d);
|
||||
my $is=1;
|
||||
$is=0 if ($dow > 5); # Samstag (6) oder Sonntag (7)
|
||||
foreach (@work) {
|
||||
my $a=sprintf("%02s.%02s.%04s", $d,$m,$y);
|
||||
$is=0 if ($_ eq $a);
|
||||
}
|
||||
return $is;
|
||||
}
|
||||
|
||||
sub is_trade_day {
|
||||
my $y=shift;
|
||||
my $m=shift;
|
||||
my $d=shift;
|
||||
my $dow = Day_of_Week($y,$m,$d);
|
||||
my $is=1;
|
||||
$is=0 if ($dow > 5); # Samstag (6) oder Sonntag (7)
|
||||
foreach (@trade) {
|
||||
my $a=sprintf("%02s.%02s.%04s", $d,$m,$y);
|
||||
$is=0 if ($_ eq $a);
|
||||
}
|
||||
return $is;
|
||||
}
|
||||
|
||||
sub is_business_day {
|
||||
my $k=shift;
|
||||
my @k=@{$k};
|
||||
my $y=shift;
|
||||
my $m=shift;
|
||||
my $d=shift;
|
||||
my $dow = Day_of_Week($y,$m,$d);
|
||||
my $is=1;
|
||||
$is=0 if ($dow > 5); # Samstag (6) oder Sonntag (7)
|
||||
foreach my $dat (@k) {
|
||||
my $a=sprintf("%02s.%02s.%04s", $d,$m,$y);
|
||||
# wenn datum im array ($_) kein jahr beinhaltet, akteuelles Jahr nutzen
|
||||
if ($dat =~ /^([0-9]{2})\.([0-9]{2})\.([0-9]{2})$/) {
|
||||
$dat = $1.".".$2."."."20".$3;
|
||||
}
|
||||
$dat .= ".$MOD_YYYY" if ($dat =~ /^[0-9]{2}\.[0-9]{2}$/);
|
||||
$dat .= "$MOD_YYYY" if ($dat =~ /^[0-9]{2}\.[0-9]{2}\.$/);
|
||||
$is=0 if ($dat eq $a);
|
||||
}
|
||||
return $is;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
Reference in New Issue
Block a user