Thread timelocal und ein Konvertierungsproblem unter UNIX (15 answers)
Opened by v0id at 2007-04-05 15:59

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

View full thread timelocal und ein Konvertierungsproblem unter UNIX