/ / Ako môžem získať a použiť nastavenie TZ používateľa z jeho .bashrc v skripte Perl CGI? - bash, perl, časové pásmo

Ako môžem získať a používať nastavenie TZ používateľa z ich .bashrc v skripte Perl CGI? - bash, perl, timezone

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ď č. 1

Jednoduchá 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“?