2016-08-10 3 views
-1

私はコードの下に使用してPerlでオフセットして、ユーザーのコンピュータのローカルタイムゾーンを取得しようとしています:Perlでユーザのコンピュータのローカルタイムゾーンをオフセットで取得するには?

use POSIX; 
my $timezone = strftime("%z", localtime()); 
print "\n==Time zone offsets===".$timezone."\n"; 

以下のような上記のスクリプトの印刷出力をローカルコンピュータ上でスクリプトを実行すると、同じ実行すると

==Time zone offsets===+0530 

ライブサーバーからではなく、同じコンピュータ上のスクリプトは、それは以下のようなさまざまな出力を表示する:

==Time zone offsets===-0400 

私は常にスクリプトを再必要がありますしたいですサーバーの代わりにユーザーのローカルコンピューターのタイムゾーンオフセットを設定します。

私は試してみましたが、手に入らないように助けてください。

+1

どこにライブサーバーがありますか?どこにいますか?あなたのシステムのいずれかが間違って設定されているように聞こえるが、9.5時間の差異は莫大だ!システムオペレータが指示しない限り、ほとんどのPCがどこにいるかを知る方法はありません! – Borodin

+0

現在、私はインドにいるが、アメリカのサーバー – Laeeq

+0

だから、数字は正しい。必要な調整を行うには、サーバーにローカルタイムゾーンを渡す必要があります。 – Borodin

答えて

1

ユーザーのタイムゾーンを指定する必要があります。 DateTimeを使用して、以下のようにそれが行われている:あなたはまた、適切TZのenv VARを設定することができ

$ for tz in local Asia/Calcutta; do 
    perl -e' 
     use feature qw(say); 
     use DateTime qw(); 
     say DateTime->now(time_zone => $ARGV[0]); 
    ' "$tz" 
    done 
2016-08-10T13:20:06 
2016-08-10T22:50:06 

$ export TZ 
$ for TZ in America/Toronto Asia/Calcutta; do 
    perl -e' 
     use feature qw(say); 
     use DateTime qw(); 
     say DateTime->now(time_zone => "local"); 
    ' 
    done 
2016-08-10T13:20:06 
2016-08-10T22:50:06 

TZlocaltimeに影響を与えます。

$ export TZ 
$ for TZ in America/Toronto Asia/Calcutta; do 
    perl -e' 
     use feature qw(say); 
     use POSIX qw(strftime); 
     say strftime("%Y-%m-%dT%H:%M:%S", localtime); 
    ' 
    done 
2016-08-10T13:20:06 
2016-08-10T22:50:06 

あなたのスクリプト内$ENV{TZ}を変更する場合は、後でPOSIX::tzset();呼び出す必要があります。

$ perl -e' 
    use feature qw(say); 
    use POSIX qw(strftime tzset); 
    for my $tz (qw(America/Toronto Asia/Calcutta)) { 
     $ENV{TZ} = $tz; 
     tzset(); 
     say strftime("%Y-%m-%dT%H:%M:%S", localtime); 
    } 
    ' 
2016-08-10T13:20:06 
2016-08-10T22:50:06 
関連する問題