Vous pouvez utiliser le module merveilleux DateTime pour cela:
use strict; use warnings;
use DateTime;
# extract timezone name from file in env variable
(my $tz = $ENV{TZ}) =~ s#^/usr/share/zoneinfo/##;
my $now = DateTime->now(time_zone => $tz);
print "The current time is: " . $now->strftime('%F %T %Z') . "\n";
Quand je lance cela avec TZ = "/ usr/share/zoneinfo/Europe/Paris", je vois:
L'heure actuelle est: 2010-04-19 20:09:03 CEST
Pour extraire les données de fuseau horaire du fichier de l'utilisateur: une solution rapide est de stocker la configuration TZ de cet utilisateur dans un fichier séparé (qui pourrait .bashrc source), et vous pouvez analyser manuellement dans le CGI (mais cela entre dans un autre sujet: Comment mieux stocker les configurations par utilisateur pour un CGI?)
# /home/<user>/.tz should have the content: export TZ="/usr/share/zoneinfo/timezonename"
open(my $tz_fh, "/home/${user}/.tz");
chomp(my $tz_data = <$tz_fh>);
close $tz_fh;
(my $tz_path) = $tz_data =~ m/^export TZ\s*=\s*"(.+)"$/;
# now $tz_path contains what $ENV{TZ} would contain in the earlier code snippet.
Comment le script Perl est-il exécuté? – cjm
D'un CGI sur mon serveur web. – NinjaCat
Comment le serveur web pourrait-il savoir quel utilisateur l'interroge? –