$ date -d "Apr 1 2016 - 1 month" +%B
daje mi „marzec”, co jest świetne - miesiącem poprzedzającym kwiecień jest marzec. Jeśli to zrobię:
$ date -d "$(date -d "Apr 1 2016") - 1 month" +%B
daje mi „luty”. To powoduje błąd w bardziej złożonym kodzie, który mam. Dlaczego te 2 polecenia pokazują różne wyniki?
March
Odpowiedzi:
Możesz zobaczyć problem, włączając śledzenie powłoki:
Gdy użyjesz danych wyjściowych
date
polecenia wewnętrznego , nastąpi to na samym początku kwietnia, a kiedy odejmowanie miesiąca spowoduje nieciągłość z powodu zmiany EST / EDT:Twoje wyniki będą się oczywiście różnić w zależności od lokalnych ustawień strefy czasowej. Włączenie śledzenia spowoduje wyświetlenie strefy czasowej (w moim przypadku
EDT
).Powodem, dla którego wyniki różnią się, jest to, że w tym drugim przypadku podałeś więcej informacji
date
, sprecyzowałeś jego parametr , tj. Konkretną porę dnia. W pierwszej części, która nie została określona, dającdate
więcej swobody w określaniu daty / godziny do wyświetlenia.źródło
date -d "Apr 1 2016"; date -d "$(date -d "Apr 1 2016")"
:, otrzymam dokładnie ten sam wynik, w tym ten sam tag strefy czasowej - dlaczego usunięcie miesiąca z obu daje różne wyniki?