Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8206[/thread]

datum inkrementieren



<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten
paidopoieo
 2006-07-28 01:13
#68427 #68427
User since
2005-12-02
96 Artikel
BenutzerIn
[default_avatar]
hallo leute,

Ich hab ein programm geschrieben, das mir ein datum im format z.b: 2004/11/23 einliest, zu diesem datum 14 tage dazuzaehlt und anschliessend das datum wieder im selben format in das file rausschreibt.

es funktioniert bis auf ein paar kleinigkeiten: mit dem switch vom monat 12 auf 1 komm ich nicht ganz klar, und es sollte wenn tag und monat <= 10 sind einen nuller anfuegen, das macht es jedoch immer, so bekomm ich formate wie z.b: 2005/011/016

script:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/usr/local/bin/perl -w

use Time::Local;

open(DAT,"datum.txt");
while(<DAT>)
{
$last_Date_Search = $_;
}
close DAT;
print $last_Date_Search;


#assign date from file to $last_date
my $last_date = $last_Date_Search;


#split date in 2005 and 11 and 01 after / => month 12 = 11, counts from 0..11
my @array_date = split /\//,$last_date;

if ($array_date[1] == 12) {
$array_date[1] = $array_date[1] - 1;
}

#day month &nbs
p; year
my $dpe = timelocal(0,0,0,$array_date[2],$array_date[1],$array_date[0]);

print $dpe, "\n";

#add 14 days to $dpe => 14 days in seconds: 1209600
my $new_date_Search_seconds = $dpe + 1209600;
print $new_date_Search_seconds, "\n";


(my $sec,my $min,my $hours,my $mday,my $month,my $year,my $wday,my $yday, my $st)=localtime($new_date_Search_seconds);

print $mday, "\n";
print $month, "\n";
print $year, "\n";

if ($month == 00) {
$month = 12;
}

my $new_year = $year + 1900;

if (($mday <= 9) || ($month <= 9)) {
print $new_year,"/0",$month,"/0",$mday, "\n";

open(DAT,">datum.txt");
print DAT $new_year ,"/0", $month, "/0", $mday, "\n";
close DAT;

} else {
print $new_year ,"/", $month, "/", $mday, "\n";

open(DAT,">datum.txt");
print DAT $new_year ,"/", $month, "/", $mday, "\n";
close DAT;

}


danke fuer die hilfe.....
paidopoieo
 2006-07-28 01:14
#68428 #68428
User since
2005-12-02
96 Artikel
BenutzerIn
[default_avatar]
hi,
sorry, ich weiss programmierrichtlinien...
use strict; vergessen, werd das korregieren
styx-cc
 2006-07-28 01:26
#68429 #68429
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Also das mit den Nullen im Datum kannst du u.a. wie folgt loesen:

Code: (dl )
$$_ = $$_ < 10 ? $$_ = "0".$$_ : $$_ for (\$mday, \$month, \$year);


MfG

P.s.: Es geht aber auch mit printf, ist vielleicht etwas uebersichtlicher...
Edit: Du musst nicht mal referenzieren:
Code: (dl )
$_ = $_ < 10 ? $_ = "0".$_ : $_ for ($mday, $month, $year);
\n\n

<!--EDIT|styx-cc|1154035866-->
Pörl.
renee
 2006-07-28 01:35
#68430 #68430
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich würde zu CPAN:Date::Calc raten:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/perl

use strict;
use warnings;
use Date::Calc qw(Add_Delta_Days);

my $inkr = 14; # Datum 14 Tage hochzaehlen
my $date = '2004/11/23';
my @info = split /\//,$date;

my @new_info = Add_Delta_Days(@info,$inkr);

print join("/",map{sprintf "%02d",$_}@new_info);
\n\n

<!--EDIT|renee|1154036715-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
paidopoieo
 2006-07-28 09:33
#68431 #68431
User since
2005-12-02
96 Artikel
BenutzerIn
[default_avatar]
ok, danke renee,
ist genau das wonach ich gesucht habe....
sid burn
 2006-07-30 22:32
#68432 #68432
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Wenn du es per Hand machen möchtest, kannst du auch den "Umweg" gehen das Datum in seine Bestandteile zerlegen, und dann mittels "timelocal" eine UTC Zeit daraus generieren. Dann rechnest die Sekunden für 7 Tage wieder drauf, und rechnest die UTC Zeit wieder in ein normales Datum um (localtime).

Das ganze Verfahren habe ich erst kürzlich bei einer Logverarbeitung angewendet und funktioniert so gut.\n\n

<!--EDIT|sid burn|1154284464-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
nepos
 2006-07-31 10:50
#68433 #68433
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Wobei sich grade bei Datumsgeschichten die diversen Module anbieten. Die sind getestet und man muss das Rad nicht immer neu erfinden...
GwenDragon
 2006-07-31 14:49
#68434 #68434
User since
2005-01-17
14787 Artikel
Admin1
[Homepage]
user image
[quote=nepos,31.07.2006, 08:50]Wobei sich grade bei Datumsgeschichten die diversen Module anbieten. Die sind getestet und man muss das Rad nicht immer neu erfinden...[/quote]
Der Meinung bin ich auch.

Man kann ja notfalls ein eigenes Modul schreiben, aber vorhandene Methoden mittels ISA importieren und eigenes dazu packen.
Zum Beispiel gibt es so einige Datumsformate (für die Ausgabe), die eben doch noch mittels sprintf erstellt werden müssen.
nepos
 2006-07-31 15:50
#68435 #68435
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hm, bei CPAN:Class::Date kann man das Ausgabeformat festlegen. Dann muss man nicht mal mehr mit sprintf hantieren.
GwenDragon
 2006-07-31 17:48
#68436 #68436
User since
2005-01-17
14787 Artikel
Admin1
[Homepage]
user image
[quote=nepos,31.07.2006, 13:50]Hm, bei CPAN:Class::Date kann man das Ausgabeformat festlegen. Dann muss man nicht mal mehr mit sprintf hantieren.[/quote]
Ah, stimmt. Alles kann eineR nicht immer finden.
Das Forum hat immer gute Tipps parat.
<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten



View all threads created 2006-07-28 01:13.