Každý z mojich používateľov má vo svojom systéme definované (prípadne) odlišné TZ .bashrc, Mám skript v jazyku Perl, ktorý zobrazuje dátum a čas a chcem, aby sa zobrazoval spolu s ich časovým pásmom profilu.
Vie niekto najlepší spôsob, ako to urobiť?
odpovede:
3 pre odpoveď č. 1Jednoduchá odpoveď je použiť:
use POSIX;
....
print strftime("%H:%M %Z", localtime);
Zóna vrátená pomocou% Z sa však v jednotlivých systémoch líši. mám GMT Daylight Time
a BST
na dvoch rôznych platformách.
editovať Nasleduje experiment, ktorý ukazuje, že (aspoň pre mňa)% Z berie do úvahy TZ
export TZ=""
perl -MPOSIX -e "print strftime("%H:%M %Zn", localtime)"
export TZ=America/Los_Angeles
perl -MPOSIX -e "print strftime("%H:%M %Zn", localtime)"
Produkuje výstup
16:45 UTC
09:45 PDT
3 pre odpoveď č. 2
Môžete použiť tento nádherný modul Dátum Čas pre to:
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";
Keď to spustím s TZ = "/ usr / share / zoneinfo / Europe / Paris", vidím:
Aktuálny čas je: 2010-04-19 20:09:03 CEST
Pokiaľ ide o získavanie údajov časových pásiem z internetuužívateľský súbor: rýchle riešenie je uložiť konfiguráciu TZ tohto používateľa do samostatného súboru (ktorý môže zdroj .bashrc) a môžete ho manuálne analyzovať v CGI (avšak dostane sa to do inej témy: Ako môžem najlepšie ukladanie konfigurácií na jedného používateľa pre 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 TZs*=s*"(.+)"$/;
# now $tz_path contains what $ENV{TZ} would contain in the earlier code snippet.
0 pre odpoveď č. 3
Čo je v tomto kontexte „profil“?