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

Code verkleinern bei Zeitberechnung

Leser: 1


<< >> 3 Einträge, 1 Seite
chrisidc
 2006-02-09 22:36
#62824 #62824
User since
2006-01-26
8 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich habe hier ein script wo ich echt erstaunt war, als ich gesehen habe wieviel code ich da geschrieben habe.
Deshalb meine Frage ob das vielleicht auch mit weniger code geht (außer natürlich die variablennamen abzukürzen).

Worum geht es eigentlich in diesem script:

Ich habe das Datum ($datum) und die Uhrzeit ($zeit).
Wenn Winterzeit ist möchte ich 1 Stunde dazuzählen.
Wenn Sommerzeit ist möchte ich 2 Stunden dazuzählen.

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
#!/usr/bin/perl -w
use Time::Local;

my $datum="2006/02/09";
my $zeit="19:02:01";

my ($GMT_Sekunden,$GMT_Minuten,$GMT_Stunden,$GMT_Monatstag,$GMT_Monat,$GMT_Jahr,$GMT_Wochentag,$GMT_Jahrestag,$GMT_Jahreszeit) = gmtime(time);
if ($GMT_Jahreszeit eq 1) {$GMTzuLOCALsekunden = 3600;} else {$GMTzuLOCALsekunden = 7200;}
print "$GMT_Stunden, $GMTzuLOCALsekunden\n";

my ($stats_jahr,$stats_monat,$stats_tag) = (split(/\//,$datum))[0,1,2];
my ($stats_stunden,$stats_minuten,$stats_sekunden) = (split(/:/,$zeit))[0,1,2];

my $stats_unixtime = timelocal($stats_sekunden,$stats_minuten,$stats_stunden,$stats_tag, $stats_monat, $stats_jahr);
$stats_unixtime=$stats_unixtime+$GMTzuLOCALsekunden;

my ($new_stats_sekunden,$new_stats_minuten,$new_stats_stunden,$new_stats_tag,$new_stats_monat,$new_stats_jahr,$a,$b,$c) = gmtime($stats_unixtime);
$new_stats_jahr+=1900;
$new_stats_monat = '0'.$new_stats_monat if $new_stats_monat<10;
$new_stats_tag = '0'.$new_stats_tag if $new_stats_tag<10;
$new_stats_stunden = '0'.$new_stats_stunden if $new_stats_stunden<10;
$new_stats_minuten = '0'.$new_stats_minuten if $new_stats_minuten<10;
$new_stats_sekunden = '0'.$new_stats_sekunden if $new_stats_sekunden<10;

print "$new_stats_tag,$new_stats_monat,$new_stats_jahr $new_stats_stunden:$new_stats_minuten:$new_stats_sekunden\n";


Vielen Dank schon mal im Voraus. Ich bin mir sicher das geht auch viel einfacher, jedoch habe ich im Internet nicht wirklich etwas gefunden.

Grüße
Christoph
renee
 2006-02-10 00:03
#62825 #62825
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Benutze CPAN:Date::Time das kann schon mit Zeitumstellungen umgehen...

Und statt der ganzen $new_stats_sekunden = '0'.$new_stats_sekunden if $new_stats_sekunden<10;

kannst Du sprintf benutzen... $new_stats_sekunden = sprintf("%02",$new_stats_sekunden); siehe perldoc -f sprintf
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/
Strat
 2006-02-10 15:28
#62826 #62826
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
vielleicht hilft dir auch die funktion strftime aus dem Modul CPAN:POSIX.
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 3 Einträge, 1 Seite



View all threads created 2006-02-09 22:36.