Mam serwer działający z ustawioną strefą czasową UTC
. Wyglądało na to, że była to ogólnie dobra praktyka (popraw mnie, jeśli się mylę).
W każdym razie jeden z serwerów, z którymi się łączę, w celu obsługi scp
plików, działa EDT
i przechowuje pliki, które muszę skopiować w formacie/path/to/filename/data20120913
Patrzyłem na próbę rsync
plików przy użyciu czegoś takiego jak -mtime -1
flaga find dla plików zmodyfikowanych w ostatnim dniu, ale nie miałem szczęścia.
Nie mam nic przeciwko zwykłemu scp
kopiowaniu pliku z bieżącego dnia, ale teraz jest 4-godzinne okno, w którym uruchomienie date +%Y%m%d
da inny dzień na każdym serwerze, co trochę mnie wkurza.
Przeglądając man date
, widzę, że mogę uzyskać wynik czasu jako UTC
, ale nie widzę sposobu, aby uzyskać wynik jako kolejną strefę czasową, taką jakEDT
Przypuszczam, że mógłbym również użyć czegoś takiego jak GNU
rozszerzenie daty, date -d 20100909 +%s
aby uzyskać datę w sekundach od epoki, zastosować ręczne 4 * 60 * 60
obliczenia sekundowe i zobaczyć renderowanie tego jako daty - ale wtedy, gdy zacznie się czas letni, będzie jeszcze godzina wolnego .
Czy istnieje prostszy sposób na wyświetlenie daty w YYYYMMDD
formacie dla EDT
serwera, który jest ustawiony UTC
?
Odpowiedzi:
Możesz ustawić strefę czasową na czas trwania zapytania, a zatem:
Zwróć uwagę na spację między
TZ
ustawieniem adate
poleceniem. Wrc
powłoce podobnej do Bourne'a i podobnej ustawiaTZ
zmienną tylko dla wiersza poleceń. W innych powłok (csh
,tcsh
,fish
), zawsze można użyćenv
zamiast polecenia:tl; dr
W systemach Linux. strefy czasowe są zdefiniowane w plikach w
/usr/share/zoneinfo
katalogu. Struktura ta jest często nazywana „bazą danych Olson”, aby uhonorować jej twórcę.Reguły dla każdej strefy czasowej są zdefiniowane jako wiersze pliku tekstowego, które są następnie kompilowane do pliku binarnego. Tak skompilowane linie określają nazwę strefy; zakres danych i czas obowiązywania strefy; przesunięcie względem UTC dla czasu standardowego; oraz notacja określająca sposób przejścia na czas letni i zimowy, jeśli dotyczy.
Na przykład katalog „Ameryka” zawiera informacje wymagane dla Nowego Jorku w
America/New_York
użytym pliku powyżej.Uwaga: specyfikacja nieistniejącej strefy (nazwa pliku) jest dyskretnie ignorowana i podawane są czasy UTC. Na przykład zgłasza niepoprawny czas:
Pojedyncza specyfikacja UNIX, wersja 3, znana jako SUSv3 lub POSIX-2001, zauważa, że dla przenośności ciąg znaków identyfikujący opis strefy czasowej powinien zaczynać się od dwukropka. Zatem możemy również napisać:
Jako alternatywna metoda dla specyfikacji stref czasowych przy użyciu ścieżki do pliku opisu, SUSv3 opisuje model POSIX. W tym formacie ciąg jest zdefiniowany jako:
gdzie
std
jest standardową nazwą komponentu idst
tą, która zachowuje czas letni. Każda nazwa składa się z trzech lub więcej znaków.offset
Jest pozytywna dla stref czasowych na zachód od głównego południka i negatywne dla tych na wschód od południka. Przesunięcie jest dodawane do czasu lokalnego w celu uzyskania UTC (wcześniej znanego jako GMT). Polastart
iend
czas wskazują, kiedy występują przejścia standardowe / dzienne.Na przykład we wschodnich Stanach Zjednoczonych standardowy czas jest o 5 godzin wcześniejszy niż UTC, a
EST5EDT
zamiast niego możemy podaćAmerica/New_York
. Te alternatywy nie zawsze są jednak rozpoznawane, szczególnie w strefach poza Stanami Zjednoczonymi i najlepiej ich unikać.HP-UX (system UNIX zgodny z SUSv3) używa reguł tekstowych
/usr/lib/tztab
i nazw POSIX, takich jak EST5EDT, CST6CDT, MST7MDT, PST8PDT. Plik zawiera wszystkie reguły historyczne dla każdej strefy czasowej, podobnie jak baza danych Olson.UWAGA: Powinieneś być w stanie znaleźć wszystkich stref czasowych, sprawdzając następującym katalogu:
/usr/share/zoneinfo
.źródło
export
wygląda lepiej niżenv
rozkazMożesz to zrobić, manipulując
TZ
zmienną środowiskową. Poniższe informacje przedstawiają czas lokalny dla US / Eastern, który będzie również wystarczająco inteligentny, aby poradzić sobie z czasem letnim:Nazwa strefy pochodzi z plików i katalogów w środku
/usr/share/zoneinfo
.źródło
Bądź ostrożny! Data szczęśliwie wypluje czas w twojej AKTUALNEJ strefie czasowej, jeśli nadasz jej strefę czasową, której nie rozpozna.
Spójrz na to:
Pamiętaj, że nie ma strefy czasowej o nazwie EDT. Prawdę powiedziawszy,
zwroty
I to działa:
Jeśli jednak twój przyjaciel mieszka w tajemniczej krainie Gobbledygook, a informacje o jego strefie pokrywają się z twoją, możesz podać datę i godzinę w strefie Gobbledygook, a on chętnie zrobi to, gdy nie będzie wartości wyjścia, aby poinformować cię, że strefa nie jest mu znana:
źródło
TZ
ciąg zwraca czas UTC.źródło
Termin składnia jest tajemna i podatne na błędy, które sprawia, że wywołanie z linii poleceń ból. Dlatego napisałem mały skrypt (nazwałem go worldtime ), który wydrukuje określony (lub bieżący) czas z podstawowego czasu zome (twojego lokalnego) w niektórych innych strefach czasowych i na odwrót.
Oto jest. Dostosuj go do swoich potrzeb, umieść na swojej ścieżce i spraw, aby był wykonywalny.
źródło
Często masz sygnaturę czasową w lokalnej strefie czasowej i musisz przekonwertować ją na zdalny tz. Można to zrobić za pomocą:
gdzie:
źródło