Как я устанавливаю часовой пояс для localtime Perl ()?

Вы не можете использовать теги Django внутри Javascript. Они на стороне сервера. Вместо этого вы можете кэшировать URL-адрес в переменной, а затем объединить идентификатор с ним следующим образом:

for(j=0; j<5; j++){
    var thisID = (data[j].id)
    var listing_url = "{% url 'viewListing' listingID=9999 %}";
    imgA.href = listing_url.replace(/9999/, thisID);
}

Кредит переходит к @MikeLee: Получить значение переменной javascript в теге шаблона URL Django [ 111]

17
задан mike 15 April 2009 в 19:34
поделиться

4 ответа

Используйте POSIX :: tzset .

use POSIX qw(tzset);

my $was = localtime;
print "It was      $was\n";

$ENV{TZ} = 'America/Los_Angeles';

$was = localtime;
print "It is still $was\n";

tzset;

my $now = localtime;
print "It is now   $now\n";
$ perl -v

This is perl, v5.8.8 built for x86_64-linux-thread-multi

Copyright 1987-2006, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

$ perl tzset-test.pl
It was      Wed Apr 15 15:58:10 2009
It is still Wed Apr 15 15:58:10 2009
It is now   Wed Apr 15 12:58:10 2009
20
ответ дан 30 November 2019 в 12:07
поделиться

Я настоятельно рекомендую использовать для этого модуль. В частности, я бы предложил использовать DateTime (см. Perl DateTime Wiki или CPAN

). Тогда вы сможете сделать что-то вроде следующего:

use strict;
use warnings;
use DateTime;
my $dt = DateTime->now(); # *your* local time assuming your system knows it!


my $clone1 = $dt->clone; # taking a copy.
$clone1->set_time_zone('America/Los_Angeles');


print "$clone1\n";   # output using ISO 8601 format (there a lot of choices)
print "$dt\n";
10
ответ дан 30 November 2019 в 12:07
поделиться

Whilst your code works fine for me on both Linux (Perl 5.10.0) and MacOS X (5.8.9), there is a possible solution.

The underlying C functons used by Perl (ctime(), localtime(), etc) call tzset() the first time they're invoked, but not necessarily afterwards. By calling it yourself you should ensure that the timezone structures are correctly re-initialised after any change to $TZ.

Fortunately this is easy - the tzset() function is available in the POSIX module:

#!/usr/bin/perl -w
use POSIX qw[tzset];

$ENV{'TZ'} = 'Europe/London';
tzset();
print scalar localtime();

NB: some Google searches suggest that this is only necessary with Perl versions up to and including 5.8.8. Later versions always call tzset() automatically before each call to localtime().

3
ответ дан 30 November 2019 в 12:07
поделиться
use Time::Zone;

my $TZ = 'America/Los_Angeles';
my $now = scalar localtime time() + tz_offset($TZ);
print "It is now $now\n";

, кажется, здесь работает. («Скаляр» здесь избыточен, поскольку $ теперь дает ему скалярный контекст, но также приятно быть явным.)

Согласно комментарию, я получил исходную проблему. Похоже, это решает проблему для меня, но, учитывая, что у других нет первоначальной проблемы, бит «похоже, здесь работает» предназначен для того, чтобы эти люди могли попробовать и это решение, чтобы убедиться, что оно ничего не сломает. , (Мне интересно, заметил ли Альнитак разницу между тем, что я написал, и оригинальным сообщением?)

1
ответ дан 30 November 2019 в 12:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: