Większość aplikacji formatuje znaczniki czasu do postaci strawnej dla człowieka. Czasem jednak pojawia się konieczność przeanalizowania danych bardziej niskopoziomowych, w których znajdziemy znacznik czasu w postaci surowej.
Jak szybko dokonać konwersji w jedną i drugą stronę? Choćby przy pomocy Perla. A bez Perla da się? Da się. Otóż można do tego celu użyć po prostu polecenia... date.
Implementacja date różni się między systemami. Zauważmy na przykład, że w GNU date czas sekundowy należy poprzedzić znakiem @ (nie ma tego w podręczniku ekranowym man, ale jest w info).
Implementacja date różni się między systemami. Zauważmy na przykład, że w GNU date czas sekundowy należy poprzedzić znakiem @ (nie ma tego w podręczniku ekranowym man, ale jest w info).
Konwersja czasu na format uniksowy:
freebsd$ date -j -f "%Y-%m-%d %H:%M:%S" "2010-05-07 02:34:59" "+%s"1273192499
linux$ date -d "2010-05-07 02:34:59" +%s
1273192499
Konwersja czasu z formatu uniksowego:
freebsd$ date -j -f "%s" 1273192499
ptk 7 maj 02:34:59 2010 CEST
linux$ date -d @1273192499
pią, 7 maj 2010, 02:34:59 CEST
A gdybyśmy chcieli przetworzyć format sekundowy jako jeden z elementów wiersza podanego w potoku? Z pomocą może przyjść choćby GNU awk:
$ echo 1273192499 | gawk '{print strftime("%c", $1)}'
pią, 7 maj 2010, 02:34:59
Niestety, nie każdy system (i nie każda dystrybucja Linuksa) ma domyślnie zainstalowane GNU awk.
Na koniec warto wspomnieć o wygodnych podróżach w czasie, które umożliwia nam date na FreeBSD przy pomocy opcji -v.
Aby ustalić ostatni poniedziałek przyszłego miesiąca:
- ustawiamy się na pierwszym dniu obecnego miesiąca
- przeskakujemy o 2 miesiące do przodu
- cofamy się o jeden dzień (na ostatni dzień miesiąca poprzedniego)
- cofamy się, aż znajdziemy poniedziałek
pon 28 cze 17:06:13 2010 CEST
Więcej informacji:
Brak komentarzy:
Prześlij komentarz