Jak to możliwe i jak sobie z tym poradzić? Tworzę skrypt kopii zapasowej zależny od Uniksa date
i odkryłem interesujący błąd:
[root@web000c zfs_test]# date +%y-%m-%d --date='2 months ago'
14-04-01
[root@web000c zfs_test]# date +%y-%m-%d --date='3 months ago'
14-02-28
[root@web000c zfs_test]# date
Sun Jun 1 00:08:50 CEST 2014
date
command-line-interface
Nierób
źródło
źródło
date
...Odpowiedzi:
Widzisz to zachowanie z powodu czasu letniego (czas letni).
Ponieważ jesteś obecnie w okresie letnim, gdzie twój zegar jest o godzinę do przodu, kiedy poprosisz o trzy miesiące temu tuż po północy pierwszego czerwca, czas kończy się o godzinę „wcześniej”, ponieważ nie była to godzina trzecia miesiące temu.
Dokumentacja daty GNU sugeruje obejście tego problemu, używając godziny 12:00 i 15 miesiąca jako punktu wyjścia, gdy pytamy odpowiednio o względne dni lub miesiące. Na przykład:
źródło
[root@web000c zfs_test]# date +%y-%m-%d --date='3 months ago'
14-03-01
[root@web000c zfs_test]# date
Sun Jun 1 01:00:15 CEST 2014
date
użycia.Jeśli najważniejszy jest czas bezwzględny, prawdopodobnie najlepiej jest zrezygnować z UTC, ponieważ istnieje w tym celu. Odpowiedź Michaela jest bardzo przydatna, gdy musisz zająć się problemem, ale zazwyczaj dobrym pomysłem jest unikanie go całkowicie tam, gdzie możesz.
Gdy twój system nie jest ustawiony domyślnie na UTC, najprostszym sposobem na przekazanie strefy czasowej jest poprzedzenie polecenia
TZ
zmienną środowiskową. Ogranicza to przełączenie strefy do pojedynczego polecenia i zapobiega wyciekaniu zmiennej do kolejnych poleceń.To, czego nie powinieneś robić, to wyeksportować
TZ
zmienną, ponieważ może to bardzo skomplikować rozwiązywanie problemów, jak pokazano poniżej.źródło
W tym konkretnym roku, w którym komputer myśli, że jest uruchomiony, i w konkretnym dniu, który wybrałeś do testu „1 miesiąc temu, 2 miesiące temu i 3 miesiące temu, tak - prawdopodobnie wykrycie to nastąpi 29 lutego. Nie zawsze błąd, ale ...
Teraz dzisiaj NIE jest 2014-06-01. Spróbuj ponownie. Ustaw datę komputera na 01.01.2013. Spróbuj ponownie.
Ustaw datę komputera na 01.01.2014. Spróbuj ponownie.
źródło
MDY
formacie amerykańskim , użyj/
es do rozdzielenia. Co więcej, ponieważ jesteśmy tu społecznością międzynarodową, używaj odpowiednich dat ISO, takich jak2014-09-01
.