Schrift
[thread]5876[/thread]

Perl-Anfänge: Umrechnungen



<< >> 10 Einträge, 1 Seite
Gast Gast
 2003-11-05 11:10
#69212 #69212
hi leute,

ich fange gerade an meine ersten perl-progrämmchen zu schreiben...leider komm ich damit nicht ganz so klar....
ich hab ein skript gebastelt, welches einfach die sekunden zb. 3680 in einem vernünftigen zeitformat ausgibt...aber nicht von 1970 an gerechnet....sondern es soll einfach die 3680 sekunden in stunden, minuten und sekunden ausgeben....

soweit bin ich mal:

#!/usr/bin/perl -w
#
if ($ARGV[0])   { $wann = $ARGV[0]; }
else            { $wann = <STDIN>;  }
($sek,$min,$hour,$mday) = localtime $wann;
if ( $mday  < "10"){ $mday = "0" . $mday;}
if ( $hour < "10") { $hour = "0" . $hour; }
if ( $min  < "10") { $min  = "0" . $min;  }
if ( $sek  < "10") { $sek  = "0" . $sek;  }
print "$mday:$hour:$min:$sek\n";

aber da stimmts nicht....ab dem print hats da was....wer kann mir helfen???
renee
 2003-11-05 11:33
#69213 #69213
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Was wird denn ausgegeben??

Du musst noch $hour-- machen, bevor Du die if-Abfrage machst...

Du kannst die if-Abfragen auch durch folgendes ersetzen: $hour = sprintf("%02i",$hour);
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/
havi
 2003-11-05 11:47
#69214 #69214
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Was stimmt denn an der Ausgabe nicht ???

Gruss
esskar
 2003-11-05 11:55
#69215 #69215
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
hier mal ein "gute" Version deines codes

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

use strict;
use warnings;

my $wann = "";

$wann = $ARGV[0] || <STDIN>;

my ($sek,$min,$hour,$mday) = localtime $wann;
printf("%02i:%02i:%02i:%02i\n", $mday, $hour, $min, $sek);
ghost
 2003-11-05 12:06
#69216 #69216
User since
2003-11-05
2 Artikel
BenutzerIn
[default_avatar]
hi,

allerdings kommt doch da auch nicht wirklich eine korrekte ausgabe....

3600 sekunden sind meines wissens eine stunde....

dein "gutes" script wirft aber folgendes ergebnis aus:

01:02:00:00

das wären bei mir:
1 tag, 2 stunden, 0 minuten und 0 sekunden....

bei meinem script wirft er "nur" eine stunde zuviel aus und ab 23:00 uhr stimmen die werte auch nicht mehr.....das is das merkwürdige daran....

comments???
esskar
 2003-11-05 12:11
#69217 #69217
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl -w

use strict;
use warnings;

my $wann = time;
my ($sek,$min,$hour,$mday) = localtime $wann;
printf("%02i:%02i:%02i:%02i\n", $mday, $hour, $min, $sek);


05:11:13:13


musst eben schauen, wie du $wann setzt;
Dubu
 2003-11-06 14:05
#69218 #69218
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
localtime() ist fuer so etwas nun mal nicht geeignet. Die UTC-Zeit beginnt am 1. Januar 1970 (das ist schon mal der 1. Tag im Monat, nicht der 0.), es wird Sommer-/Winterzeit beruecksichtigt, irgendwann schlagen die Schaltjahre zu, etc.

Fuer deine Aufgabe waere es deutlich einfacher, die Werte "von Hand" zu berechnen:
Code: (dl )
1
2
3
4
5
chomp(my $t=<>);
my $s = $t % 60; $t = int ($t/60);
my $m = $t % 60; $t = int ($t/60);
my $h = $t % 24; $t = int ($t/24);
print "$t Tage, $h Stunden, $m Minuten, $s Sekunden";

Wenn du aber mit Zeitdifferenzen rechnen moechtest und richtige Tage und Zeiten erhalten (inkl. Schalttage und Sommerzeit), dann nimm lieber ein Modul wie Date::Manip oder Date::Calc.
ghost
 2003-11-06 17:56
#69219 #69219
User since
2003-11-05
2 Artikel
BenutzerIn
[default_avatar]
hab das ganze jetzt so gelöst....gut ist....*g*

thx for help

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl -w
#
# Syntax: seconds2date [seconds]
#
if ($ARGV[0])   { $wann = $ARGV[0]; }
else            { $wann = <STDIN>;  }
#($sek,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime $wann;
($sek,$min,$hour,$mday,$mon,$year) = gmtime $wann;
$year-= "70";
$mday--;
if ( $hour < "10") { $hour = "0" . $hour; }
if ( $min  < "10") { $min  = "0" . $min;  }
if ( $sek  < "10") { $sek  = "0" . $sek;  }
print "$hour:$min:$sek - $mday Tage $mon Monate $year Jahre\n";


greets

Bearbeitet von Crian: Code-Tags eingefügt\n\n

<!--EDIT|Crian|1068136778-->
havi
 2003-11-06 18:02
#69220 #69220
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Hi!

Kleine Info fuer dich!

Benutze doch

Code: (dl )
print "Hello Perl-Community\n";


sieht imho besser aus als,

print "Hello Perl-Community\n";

Gruss\n\n

<!--EDIT|havi|1068134566-->
Crian
 2003-11-06 18:38
#69221 #69221
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
1) use strict
2) use strict
3) use strict
4) kennst Du (s)printf ? Damit kannst Du Dir das gefuddel mit den Nullen sparen,
Code: (dl )
my $datum = sprintf "%02s.%02s.%4s", $tag, $monat, $jahr;

5) @Havi : füg doch den Code-Block ein - wozu bist Du Moderator ;)

edit: Punkt 5 hab ich mal erledigt ... :)\n\n

<!--EDIT|Crian|1068136815-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< >> 10 Einträge, 1 Seite



View all threads created 2003-11-05 11:10.