Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Perl] Posix, mktime, strftime en localtime gerommel

Pagina: 1
Acties:

  • Keiichi
  • Registratie: Juni 2005
  • Laatst online: 00:04
Ik heb hetvolgende scriptje in perl:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
use POSIX;
use Time::Format qw(time_format time_strftime time_manip);

setlocale(LC_ALL, "nl_NL@euro");

$time_t = POSIX::mktime( 0, 0, 0, 25, 7, 2007-1900 );
print "ltime: " . POSIX::strftime("%c (Hour, min,sec = %H:%M:%S)",localtime($time_t)) . "\n";
print "ftime: " . POSIX::strftime("%c (Hour, min,sec = %H:%M:%S)",0,0,0,25,7,2007-1900) . "\n";
print "secs: " . $time_t . " & " . POSIX::strftime("%s",0,0,0,25,7,2007-1900) . "\n\n";
$time_t = POSIX::mktime( 0, 0, 0, 25, 2, 2007-1900 );
print "ltime: " . POSIX::strftime("%c (Hour, min,sec = %H:%M:%S)",localtime($time_t)) . "\n";
print "ftime: " . POSIX::strftime("%c (Hour, min,sec = %H:%M:%S)",0,0,0,25,2,2007-1900) . "\n";
print "secs: " . $time_t . " & " . POSIX::strftime("%s",0,0,0,25,2,2007-1900) . "\n\n";


De output die ik hiermee krijg is:
code:
1
2
3
4
5
6
7
ltime: za 25 aug 2007 01:00:00 CEST (Hour, min,sec = 01:00:00)
ftime: za 25 aug 2007 00:00:00 CEST (Hour, min,sec = 00:00:00)
secs: 1187996400 & 1187992800

ltime: zo 25 mrt 2007 00:00:00 CET (Hour, min,sec = 00:00:00)
ftime: zo 25 mrt 2007 00:00:00 CET (Hour, min,sec = 00:00:00)
secs: 1174777200 & 1174777200


Waar ik over struikel is dat mktime in de zomerse dagen een uur erbij optelt.

Zoals ik begrijp zou de functie 'strftime' mktime op zijn beurt weer aanroepen, maar dit lijkt niet als zodanig te gebeuren. Als dit wel het geval geweest zou zijn, zou het logischer wijs zijn dat een strftime met gelijke argumenten als mktime, ook opdezelfde timestamp moeten uitkomen, maar dat doen ze dus niet.

Maak ik ergens een beredeneringsfout?

Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/


  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

Volgens mij komt het omdat je localtime($time_t) aanroept die ervoor zorgt dat er een uurtje bij komt.

Skill is when luck becomes a habit.


  • Keiichi
  • Registratie: Juni 2005
  • Laatst online: 00:04
eek schreef op zondag 16 september 2007 @ 22:48:
Volgens mij komt het omdat je localtime($time_t) aanroept die ervoor zorgt dat er een uurtje bij komt.
Wat kan ik daar dan het beste in de plaats zetten?

Ik heb nu wel een very dirty workaround gevonden door de TZ env variable op UT te zetten (Die is in ieder geval niet onderhevig aan dayligh savings times.

Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/


  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

Heb je naast 'localtime' ook niet een 'time' functie?

Skill is when luck becomes a habit.


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Keiichi schreef op zondag 16 september 2007 @ 23:46:
Wat kan ik daar dan het beste in de plaats zetten?
gmtime?

  • Keiichi
  • Registratie: Juni 2005
  • Laatst online: 00:04
Nee, al geprobeerd, maar geeft verre van het gewenste.

Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Keiichi schreef op maandag 17 september 2007 @ 09:59:
Nee, al geprobeerd, maar geeft verre van het gewenste.
Wat jij zit te doen is localtime (met dst) te mixen met gmt, dankzij die dst krijg je dat uur verschil. Eigenlijk moet je tijden altijd in gmt (zonder dst dus) opslaan/gebruiken en alleen voor display redenen naar localtime omzetten. Zodra je dat doet gaat het altijd goed :)

  • Keiichi
  • Registratie: Juni 2005
  • Laatst online: 00:04
Erkens schreef op maandag 17 september 2007 @ 10:06:
[...]

Wat jij zit te doen is localtime (met dst) te mixen met gmt, dankzij die dst krijg je dat uur verschil. Eigenlijk moet je tijden altijd in gmt (zonder dst dus) opslaan/gebruiken en alleen voor display redenen naar localtime omzetten. Zodra je dat doet gaat het altijd goed :)
gmtime geeft trouwens 23:00 vorige dag aan. Dus de argumenten van strftime worden NIET icm de gmtime functie gebruikt.

Maar de vraag voor mij blijft eigenlijk, hoe gaat strftime nu dan echt met zijn argumenten om! localtime gebruikt ie niet, maar gmtime dus ook niet.

Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/

Pagina: 1