Recentemente ho appreso how to change the timezone returned by localtime
in Perl.Quando uno script Perl deve chiamare `tzset` prima di chiamare` localtime`?
use POSIX qw(tzset);
print localtime . "\n";
$ENV{TZ} = 'America/Los_Angeles';
print localtime . "\n";
tzset;
print localtime . "\n";
uscite
Wed Apr 15 15:58:10 2009
Wed Apr 15 15:58:10 2009
Wed Apr 15 12:58:10 2009
notare come l'ora cambia solo dopo aver chiamato tzset
.
This is perl, v5.8.8 built for x86_64-linux-thread-multi
Tuttavia, sui miei sistemi sto ottenendo,
Fri Jul 8 19:00:51 2016
Fri Jul 8 16:00:51 2016
Fri Jul 8 16:00:51 2016
Notate come sul mio sistema, l'ora cambia senza chiamare tzset
. Questo vale sulle recenti versioni di Perl in Ubuntu e illumos, così come Perl v5.8.8
su Solaris 10.
Quindi, se tutti i miei test indicano che tzset
non ha alcun effetto, perché/quali altri sistemi richiedono tzset
di essere chiamato in modo esplicito? Devo ancora chiamare lo tzset
per rimanere compatibile con determinati ambienti o è ormai una cosa del passato?
http://perldoc.perl.org/perlport.html#Time-and-Date tl; dr - La nozione di ora del giorno e data del calendario del sistema è controllata in modi molto diversi. Non dare per scontato che il fuso orario sia memorizzato in $ ENV {TZ}, e anche se lo è, non dare per scontato che tu possa controllare il fuso orario attraverso quella variabile. – xxfelixxx
Vorrei qualcosa di specifico. Il mio test indica che è sicuro non chiamare 'tzset'. Poiché il software qui è inteso solo per piattaforme specifiche, non voglio dire al nostro team di fare del lavoro extra che non è necessario. Quindi, in quali condizioni abbiamo bisogno di 'tzset'? –
Una risposta è stata pubblicata ed eliminata, ma si collega a http://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime.html, che dice * "Le informazioni sul fuso orario locale vengono utilizzate come se localtime() chiama tzset(). "*, quindi suona come' localtime' dovrebbe chiamare 'tzset' automaticamente se il sistema è conforme a POSIX ??? È questo il fattore determinante: se il sistema operativo è conforme a POSIX? –