webForumDet fria alternativet

Y2K-problem med dina perlscript?

0 svar · 396 visningar · startad av Robban

RobbanMedlem sedan dec. 19992 272 inlägg
#1

Kollat så att dina perlscript visar rätt årtal efter årsskiftet? Bl.a. några av de vanligaste scripten på nätet, Matt Wrights, innehåller buggar som gör att 19100 visas i stället för 2000 (observera att det inte är i Perl buggen finns, utan i de aktuella scripten).

En vanlig missuppfattning när det gäller Perl har nämligen varit att Perls funktioner localtime() samt gmtime() returnerar de två sista siffrorna i årtalet när vad som verkligen returneras är antal år sedan 1900 (under 1900-talet har det ju inte synts någon skillnad). Detta har gjort att en del haft konstruktioner som:

if ($datum > 90 ) {
$datum = "19$datum";
} else {
$datum = "20datum";
}

Något som alltså inte fungerar (i år returnerar dessa rader 19100, nästa år 19101 o.s.v.). Följande hade varit mer korrekt:

$datum = $datum + 1900;

Eller förkortat:

$datum += 1900;

Även en del böcker och onlinekurser har tyvärr lärt ut felaktigheter i detta ämne.

Så för att föregå alla frågor om detta (vilket jag misstänker kommer dyka upp framöver i många forum), så tar jag upp det redan nu.

Om du har något av Matt Wrigts script så finns upprättade sådana numera att ladda ner från hans hemsida:
http://www.worldwidemart.com/scripts/

Mer info om Perl / Y2K samt funktionerna localtime() och gmtime():
http://www.perl.org/phbs/y2k.html http://www.perl.com/pub/doc/manual/html/pod/perlfunc/ localtime.html http://www.perl.com/pub/doc/manual/html/pod/perlfunc/gmt ime.html

Skulle dessa länkar inte hjälpa är man naturligtvis välkommen att vända sig hit för hjälp med att lösa sina Y2K-problem. God fortsättning på det nya årtusendet!! :)

[Komplettering 000103]

För att korrekt få fram tvåsiffriga årtal kan man använda:

$datum = sprintf "%.2d", ($datum % 100);

(Man använder här "modulus" för att plocka ut de sista två siffrorna, d.v.s. resten efter en division med 100 - sprintf används för att fylla på med nollor till vänster så att vi alltid har två siffror).

[Redigerat av Robban den 03 jan 2000]

Genererad på 374 ms · cache AV · v20260730165559-full.f96bc7eb