Mam datę (GNU coreutils) 7.1 zainstalowaną w moim systemie.
Jeśli spróbuję sprawdzić daty przed 14 grudnia 1901 r., Pojawia się błąd „nieprawidłowa data”. Na przykład,
$ date -d 1901-12-13
date: invalid date `1901-12-13'
$ date -d 1901-12-14
Sat Dec 14 00:00:00 EST 1901
Co powinienem zrobić, aby date
narzędzie do traktowania lat sprzed 1901 było ważne?
Otrzymuję podobne błędy dla dat po 19 stycznia 2038 r
shell-script
date
Jasdeep Singh
źródło
źródło
Odpowiedzi:
Dobre pytanie.
Dokumentacja mówi, powinno być dozwolone.
Czy korzystasz z systemu 32-bitowego?
Czy pojawia się również błąd z datami po 2038-01-20, np
Jeśli tak, to wygląda na to, że data GNU używa 32-bitowej wartości czasu.
Nie jestem pewien, jak możesz to naprawić, używając systemu 64-bitowego lub innego narzędzia, na przykład DateTime w Perlu lub datetime w Pythonie.
Niektóre tło:
Czasy Unix liczą liczbę sekund od 1 stycznia 1970 roku, używając wartości całkowitej. Jeśli system używa 32-bitowych liczb całkowitych, może liczyć tylko 2,1 miliarda sekund do przodu (do 2038-01-19 03:14:02 UTC) i 2,1 miliarda sekund do tyłu (do 1901-12-13 20:45:52 UTC).
Więcej informacji na:
źródło
uname
polecenia, z wyjątkiem faktu, że mówi, że jest to komputer i686, który, jak zakładam, jest 32-bitowy. Jeśli chodzi o problem z 2038 r., Tak, problem ten istnieje na zdalnym serwerze. Jeszcze raz dziękuję za Twój wkład! Bardzo mile widziane !!Twój system (lub przynajmniej ta wersja daty ) prawdopodobnie używa 32-bitowej wewnętrznej wartości czasu.
Epoka uniksowa (wartość czasu zero) to 1970-01-01 00:00:00 UTC. Ten punkt początkowy stawia 1901-12-13 00:00 EST tuż poza zakresem 32-bitowej wartości ze znakiem.
1901-12-14 00:00:00 EST to -2147454000
1901-12-13 15:45:52 EST to -2147483648 (aka
INT_MIN
w C, minimalna 32-bitowa liczba całkowita zeznakiem ) 1901-12-13 00:00: 00 EST to -2147540400
Możesz spróbować użyć 1901-12-13 15:45:52 EST. Powinno działać, ale sekunda wcześniej prawdopodobnie zawiedzie w taki sam sposób jak 1901-12-13 00:00.
źródło