Perl: hoe voeg ik hier een timezone toe
7 oktober 2004 - 09:24   
geplaatst door: MOTTOW
Om te beginnen...ik heb absoluut geen ervaring met perl. Onderstaande is een stukje uit een mailform script dat op de webserver van mijn provider in de VS draait. Nu is het zo dat wanneer je een form invult je een bericht terug krijgt met de datum en de tijd waarop je het hebt ingevuld. Nu klopt alleen de tijd niet. Hoe pas je dit stukje code zo aan dat degene die het form invult ook de goede tijd te zien krijgt? Het mooiste is natuurlijk dat dat voor iedereen waar ook ter wereld geld, maar het belangrijkste is dat het hier in Ned klopt. Dit is de code

  # Define arrays for the day of the week and month of the year.           #
   @days   = ('Zondag','Maandag','Dinsdag','Woensdag',
              'Donderdag','Vrijdag','Zaterdag');
   @months = ('Januari','Februari','Maart','April','Mei','Juni','Juli',
              'Augustus','September','Oktober','November','December');

   # Get the current time and format the hour, minutes and seconds.  Add    #
   # 1900 to the year to get the full 4 digit year.                         #
   ($sec,$min,$hour,$mday,$mon,$year,$wday) = (localtime(time))[0,1,2,3,4,5,6];
   $time = sprintf("%02d:%02d:%02d",$hour,$min,$sec);
   $year += 1900;

   # Format the date.                                                       #
   $date = "$days[$wday], $mday $months[$mon], $year om $time";

Perl: hoe voeg ik hier een timezone toe
7 oktober 2004 - 10:15    reactie #1
geplaatst door: BuzzE
De functie localtime(time) die hier gebruikt wordt geeft de tijd volgens de tijdzone van de machine waarop hij draait. De webserver dus in dit geval. Die tijd klopt natuurlijk alleen als de klok en tijdzone op die machine goed staan ingesteld. Je zou localtime(time) in het scriptje kunnen vervangen door gmtime(time), om de tijd in UTC (ook wel Greenwich tijd genoemd) te krijgen.

De functie time geeft de UNIX-systeemtijd in seconden sinds 1-1 1970, en de functies localtime() en gmtime() zetten dat om in seconden, minuten, uren, dag, maand, jaar.

Een webserver weet natuurlijk niet in welke tijdzone de persoon zich bevindt die die knop op het webform indrukt. Als je dat voor elkaar wil krijgen zou je het aan de gebruiker moeten vragen door een tijdzone-veld aan het formulier toe te voegen. En de bijbehorende code om dat af te handelen. Als je dan ervoor zorgt dat bijvoorbeeld de variabele $timezone de tijdzone in uren tov UTC bevat, dan verander je de expressie localtime(time) in gmtime(time+$timezone*3600).

Voor Nederland geldt dan trouwens $timezone = 1, in wintertijd en $timezone = 2 gedurende de zomertijd. Dus als je het alleen voor Nederland nu even snel wil oplossen wordt het:

($sec,$min,$hour,$mday,$mon,$year,$wday) = (gmtime(time+2*3600))[0,1,2,3,4,5,6];

En dan even die 2 in een 1 veranderen als over een paar weken de zomertijd weer voorbij is.

Perl: hoe voeg ik hier een timezone toe
7 oktober 2004 - 10:59    reactie #2
geplaatst door: MOTTOW
Nou ik houd het eerst maar even bij alleen Nederland. Dank je voor deze oplossing