Как я могу получить и использовать настройки TZ пользователя из их .bashrc в сценарии Perl CGI? - PullRequest
4 голосов
/ 19 апреля 2010

Каждый из моих пользователей имеет (возможно) разные TZ, определенные в их .bashrc . У меня есть Perl-скрипт, который отображает дату / время, и я хочу, чтобы он отображался с часовым поясом их профиля.

Кто-нибудь знает лучший способ сделать это?

Ответы [ 3 ]

3 голосов
/ 19 апреля 2010

Вы можете использовать замечательный модуль DateTime для этого:

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";

Когда я запускаю это с TZ = "/ usr / share / zoneinfo / Europe / Paris", я вижу:

Текущее время: 2010-04-19 20:09:03 CEST

Что касается извлечения данных о часовом поясе из файла пользователя: быстрое решение состоит в том, чтобы сохранить конфигурацию TZ этого пользователя в отдельном файле (который может быть создан .bashrc), и вы можете проанализировать его вручную в CGI (однако это другая тема: как лучше всего хранить индивидуальные конфигурации для 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.
3 голосов
/ 19 апреля 2010

Простой ответ - использовать:

    use POSIX;
    .... 
    print strftime("%H:%M %Z", localtime);

Но зона, возвращаемая% Z, варьируется от системы к системе. У меня есть GMT Daylight Time и BST на двух разных платформах.

Редактировать Ниже приведен эксперимент, показывающий, что (по крайней мере для меня)% Z учитывает TZ

    export TZ=''
    perl -MPOSIX -e 'print strftime("%H:%M %Z\n", localtime)'
    export TZ=America/Los_Angeles
    perl -MPOSIX -e 'print strftime("%H:%M %Z\n", localtime)'

Производит продукцию

    16:45 UTC
    09:45 PDT
0 голосов
/ 19 апреля 2010

Что такое "профиль" в этом контексте?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...