2012-03-01 30 views
6

Mam skrypt (zsh, aby być dokładne), który wykorzystujeCzy "US/Eastern" i "US/Central" i "US/Pacific" są przestarzałe dla strftime lub po prostu PHP?

strftime "%I:%M %p %Z (%a, %b %d)" "$EPOCHSECONDS"

wygenerować "aktualny czas", takich jak

„14:45 CST (Thu, Mar 01) "

To musi być w stanie wyświetlić czas w różnych USA stref czasowych, a więc używam 'US/Eastern', 'USA/Central' i 'US/Pacific' tak:

export TZ='US/Eastern' 
strftime "%I:%M %p %Z (%a, %b %d)" "$EPOCHSECONDS" 

Wydaje się, że działa dobrze, a ja wolę używać TZ = "America/CityName", ponieważ nie wymaga to ode mnie informacji, w którym mieście jest TZ, muszę tylko powiedzieć, którego TZ chcę.

Jednak zdarzyło mi się po drugiej stronie http://www.php.net/manual/en/timezones.others.php i zobaczył, że to mówi

Proszę nie używać dowolnego z wymienionych stref czasowych tutaj (oprócz UTC) one istnieją tylko dla wstecznie kompatybilne powodów.

nie wiem jakie problemy są z nazwiskami US/region, ale jestem ciekaw, czy korzystanie z nich może powodować problemy w dającej się przewidzieć przyszłości, lub nadal są bezpieczne w użyciu ? Czy to jest po prostu PHP, który ich nie lubi, czy też wszyscy odsuwają się od nich?

Odpowiedz

7

Standardowy format nazywania stref czasowych w bazie danych Olson to Kontynent/Miasto. "Stare" nazwy, o których wspominasz, takie jak US/Eastern, US/Central i wiele innych, są wymienione jako linki kompatybilności wstecznej w źródłowej dystrybucji tzdata (w pliku "wstecz"). Zgodnie z komentarzem na górze pliku, nazwy te mogły stać się linkami wstecznej zgodności pod koniec 1993 roku.

Myślę, że pamiętam, że przeczytałem, że ten standard został przyjęty, ponieważ uważano, że jest bardziej stabilny: geopolityczny (kraj) granice się zmieniają, miasta nigdy się nie przemieszczają. Być może również dlatego, że nazwy takie jak "Wschodni" i "Centralny" są uważane za bardziej zagmatwane, ponieważ oznaczają różne strefy czasowe w różnych częściach świata. W tej chwili nie mogę znaleźć żadnych odniesień do uzasadnienia nazewnictwa, więc nie cytuj mnie w tej sprawie.

Preferowane są nazwy stylu kontynentalnego/miejskiego. Zauważ, że systemy operacyjne, takie jak Debian i Ubuntu, proszą o wybranie strefy czasowej systemu za pomocą tych nazw (chyba, że ​​zostaną automatycznie wykryte w czasie instalacji). Używanie tych nazw nie byłoby naprawdę wymagane, jak mówisz, "wiem, w którym mieście jest który TZ ", ponieważ nazwa miasta jest, no cóż, częścią nazwy strefy czasowej! Jeśli więc nauczyłeś się nazwy Kontynent/Miasto zamiast lub oprócz nazw krajów/regionów, jesteś już w porządku.

Mimo to, nie sądzę, że te nazwy kiedykolwiek znikną. Na liście mailingowej strefy czasowej są one zdecydowanie nazywane "kompatybilnością wsteczną", a nie "przestarzałe" i są przeznaczone do pozostania, niezależnie od tego, co zaleca PHP.