2016-08-10 1 views
-1

Ich versuche, unter Code in Perl mit Offset-Computer des Benutzers lokalen Zeitzone zu erhalten:Wie bekomme ich die lokale Zeitzone des Benutzers mit Offset in Perl?

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

Die Ausgabe über Skriptdruck unten wie wenn Skript auf dem lokalen Computer ausführen:

==Time zone offsets===+0530 

Wenn gleiche laufen Skript von Live-Server, aber auf demselben Computer, es unterschiedliche Ausgabe wie folgt angezeigt:

==Time zone offsets===-0400 

Ich möchte Skript sollte immer wieder Zeitzonen-Offset des lokalen Computers des Benutzers anstelle des Servers ändern

Bitte helfen, ich versuche es, aber nicht bekommen.

+1

Wo auf der Welt ist Ihr Live-Server und wo sind Sie? Es klingt, als wäre das eine oder andere System falsch konfiguriert, aber eine Diskrepanz von 9,5 Stunden ist enorm! Es gibt keine Möglichkeit für die meisten PCs zu wissen, wo sie sich befinden, es sei denn, der Systembetreiber teilt sie ihnen mit! – Borodin

+0

Momentan bin ich in Indien aber Server in USA – Laeeq

+0

So sind die Zahlen korrekt. Sie müssen Ihre lokale Zeitzone an den Server weitergeben, um die erforderlichen Anpassungen vorzunehmen. – Borodin

Antwort

1

Sie müssen die Zeitzone des Benutzers angeben. Das geschieht wie folgt DateTime mit:

$ 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 

Sie auch die TZ env var entsprechend gesetzt könnte.

$ 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 

TZ wirkt sich auch auf localtime.

$ 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 

Wenn Sie $ENV{TZ} in Ihrem Skript zu ändern, müssen Sie POSIX::tzset(); danach rufen.

$ 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 
Verwandte Themen