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

timelocal und ein Konvertierungsproblem unter UNIX



<< |< 1 2 >| >> 16 Einträge, 2 Seiten
v0id
 2007-04-05 15:59
#75684 #75684
User since
2005-07-06
33 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

wie der titel schon sagt habe ich ein konvertierungsproblem mit timelocal. Ich möchte zwei Daten die ich ermittle (hier zunächst vorgegeben) subtrahieren. Also Das Enddatum soll abzüglich des Anfangsdatums die Differenz ausgeben.
Da es mit einzelnen Werten wie Stunden, Minuten usw schwierig ist möchte ich die Daten mit timelocal konvertieren, dann subtrahieren und anschliessend wieder in unsere gewohnte zeit umwandeln.

mein code sieht wie folgt aus:

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
63
64
65
use Time::Local;

my $begin_sec = 12;
my $begin_min = 33;
my $begin_hour = 13;
my $begin_day = 04;
my $begin_mon = 02;
my $begin_year = 2006;

my $end_sec = 12;
my $end_min = 33;
my $end_hour = 13;
my $end_day = 04;
my $end_mon = 02;
my $end_year = 2006;

my $dif_sec;
my $dif_min;
my $dif_hour;
my $dif_day;
my $dif_mon;
my $dif_year;

my $wday;
my $yday;
my $isdst;

my $begin_time;
my $end_time;
my $dif_time;

$begin_time = timelocal($begin_sec, $begin_min, $begin_hour,
$begin_day, $begin_mon, $begin_year);

$end_time = timelocal($end_sec, $end_min, $end_hour,
$end_day, $end_mon, $end_year);

printf ("\n\nDie Anfangszeit ist: ");
print $begin_time;

printf ("\nDie Endzeit ist: ");
print $end_time;

$dif_time = ($end_time - $begin_time);

printf ("\nDie Differenzzeit ist (unix): ");
print $dif_time;

($dif_sec, $dif_min, $dif_hour, $dif_day, $dif_mon, $dif_year, $wday, $yday, $isdst) = localtime($dif
_time);

printf ("\nDie Differenzzeit ist (normal): \n");

print $dif_sec;
printf ("sek\n");
print $dif_min;
printf ("min\n");
print $dif_hour;
printf ("h\n");
print $dif_day;
printf ("day\n");
print $dif_mon;
printf ("mon\n");
print $dif_year;
printf ("year\n");


Da die initialisierten Daten gleich sind sollte im Endeffekt überall 0 rauskommen, leider ist dem nicht so.

Die Ausgabe sieht so aus:

Die Anfangszeit ist: 1141475592
Die Endzeit ist: 1141475592
Die Differenzzeit ist (unix): 0
Die Differenzzeit ist (normal):
0sek
0min
1h
1day
0mon
70year

Wieso ist da ein Tag, eine Stunde und 70 Jahre zuviel?
Was mache ich falsch und gibt es vielleicht eine bessere Methode?

Ich freue mcih schon auf Eure hilfe, denn ohne es im nachhinein zu manipulieren, sehe ich zurzeit keinen anderen ausweg.

Gruß

v0id
renee
 2007-04-05 16:25
#75685 #75685
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Verwende besser CPAN:Date::Calc...
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/
GwenDragon
 2007-04-05 16:37
#75686 #75686
User since
2005-01-17
14787 Artikel
Admin1
[Homepage]
user image
Übrigens ist die Verwendung von printf ohne Formatstrings sinnlos und da kannste gleich print verwenden ;)
renee
 2007-04-05 16:49
#75687 #75687
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dein Problem liegt hier:
Code: (dl )
1
2
($dif_sec, $dif_min, $dif_hour, $dif_day, $dif_mon, $dif_year, $wday, $yday, $isdst) = localtime($dif
_time);


Warum machst Du da nochmal ein localtime von der Differenzzeit?? localtime von 0 entspricht dem 1.1.1970...
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/
GwenDragon
 2007-04-05 17:07
#75688 #75688
User since
2005-01-17
14787 Artikel
Admin1
[Homepage]
user image
Warum willst du eine Zeitdauer, wie du schreibst Differenzzeit, was es nicht so gibt, in ein festes Datum umrechnen? Das geht nicht.
Oder was möchtest du?\n\n

<!--EDIT|GwenDragon|1175778475-->
v0id
 2007-04-10 10:22
#75689 #75689
User since
2005-07-06
33 Artikel
BenutzerIn
[default_avatar]
guten morgen zusammen,

Date::Calc werde ich mich gleich direkt mal anschauen.
Im printf stand wahrscheinlcih zwischendurch ein formatierungszeichen, aber danke für den Hinweis ;)

Im prinzip habe ich zwei Daten eine Anfangszeit mit Datum und Uhrzeit und eine Endzeit. Ich möchte davon die Differenz haben, also die Dauer zwischen Anfangs- und Endzeit.
v0id
 2007-04-10 10:30
#75690 #75690
User since
2005-07-06
33 Artikel
BenutzerIn
[default_avatar]
wenn ich Date::Calc einbinde, bekomm ich nen error das es nicht gefunden werden kann, ich weiß nicht ob ich es hier nutzen kann. Für den Fall das es nicht geht, gibt es eine alternative methode. Ist leider zeittechnisch alles ein wenig knapp bei mir, daher wäre mir was simples am liebsten :(
renee
 2007-04-10 10:32
#75691 #75691
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das selbst auszurechnen ist etwas umständlich, weil man verschiedene Dinge wie Schaltjahr etc. berücksichtigen muss. Wenn Du CPAN:Date::Calc nimmst, wird Dir das alles abgenommen...
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/
v0id
 2007-04-10 12:54
#75692 #75692
User since
2005-07-06
33 Artikel
BenutzerIn
[default_avatar]
eine andere Frage am rande, da ich anscheinend das Modul nicht nutzen kann :(
Kann man den Rückgabewert des unix befehls (also das datum) auch irgendwie in eine variable speichern?
system("date +%Y%m%d_%H%M%S");
system gibt ja leider nur zurück ob es funktioniert hat.
renee
 2007-04-10 12:57
#75693 #75693
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Da kannst Du mit Backticks oder besser mit qx arbeiten:
Code (perl): (dl )
1
2
my $value = qx{date +%Y%m%d_%H%M%S};
print $value;
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/
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2007-04-05 15:59.