Niedawno dowiedziałem się how to change the timezone returned by localtime
in Perl.Kiedy skrypt Perla musi wywoływać `tzset` przed wywołaniem` localtime`?
use POSIX qw(tzset);
print localtime . "\n";
$ENV{TZ} = 'America/Los_Angeles';
print localtime . "\n";
tzset;
print localtime . "\n";
Wyjścia
Wed Apr 15 15:58:10 2009
Wed Apr 15 15:58:10 2009
Wed Apr 15 12:58:10 2009
zauważyć, jak zmienia się tylko godziny po wywołaniu tzset
.
This is perl, v5.8.8 built for x86_64-linux-thread-multi
Jednak w moich systemach Dostaję,
Fri Jul 8 19:00:51 2016
Fri Jul 8 16:00:51 2016
Fri Jul 8 16:00:51 2016
zauważyć, jak w moim systemie, godzina zmienia bez nazywając tzset
. Odnosi się to na ostatnich wersjach Perl w Ubuntu i illumos, a także Perl v5.8.8
na Solaris 10.
Więc jeśli wszystkie moje testy wykazały, że tzset
nie ma żadnego wpływu, dlaczego/co inne systemy wymagają tzset
aby nazwać jednoznacznie? Czy nadal muszę dzwonić pod numer tzset
, aby zachować kompatybilność z określonymi środowiskami, czy też należy już do przeszłości?
http://perldoc.perl.org/perlport.html#Time-and-Date tl; dr - Pojęcie systemu dotyczące pory dnia i daty kalendarza jest kontrolowane na wiele różnych sposobów. Nie zakładaj, że strefa czasowa jest zapisana w $ ENV {TZ}, a nawet jeśli jest, nie zakładaj, że możesz kontrolować strefę czasową za pomocą tej zmiennej. – xxfelixxx
Chciałbym coś konkretnego. Moje testy wskazują, że nie można wywoływać 'tzset'. Ponieważ tutaj oprogramowanie jest przeznaczone tylko dla konkretnych platform, nie chcę mówić naszemu zespołowi, aby wykonał dodatkową pracę, która nie jest potrzebna. Więc w jakich warunkach potrzebujemy 'tzset'? –
Odpowiedź została opublikowana i usunięta, ale zawiera linki do http://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime.html, która mówi: "Informacje o lokalnej strefie czasowej są używane tak, jakby wywoływały funkcje localtime() tzset(). "*, więc brzmi to jak' localtime' powinno automatycznie wywoływać 'tzset', jeśli system jest zgodny z POSIX ??? Czy to jest decydujący czynnik - czy system operacyjny jest zgodny z POSIX? –