GNU/Linux >> Znalost Linux >  >> Linux

Spočítejte dny od 1. 1. 1970

Řešení 1:

ring0 mě porazil o několik sekund, ale celý příkaz je:

echo $(($(date --utc --date "$1" +%s)/86400))

Jde o čas UTC. Výsledek:

[email protected]:~# echo $((`date --utc --date "$1" +%s`/86400))
14984

Rychlá kontrola pomocí WolframAlpha ukazuje, že toto je správná hodnota.

Řešení 2:

Myslím, že toto je nejjednodušší metoda:

expr $(date +%s) / 86400

Řešení 3:

date příkaz vám může poskytnout počet sekund od 1970-01-01 00:00:00 UTC .

  date +"%s"

Výsledek můžete vydělit 3600*24 získat počet dní (UTC).

Např. v Bash

  x=`date +"%s"` ; echo $(( $x / 3600 / 24 ))

pro zobrazení počtu dní.

Řešení 4:

Potřeboval jsem to také vyřešit, ale chtěl jsem získat stejnou hodnotu pro den # bez ohledu na denní dobu. S přístupy, jako jsou ty uvedené zde, se hodnota změní o půlnoci UTC namísto půlnoci místního času. Pravděpodobně to vypadá jako menší problém v EU nebo na východním pobřeží USA, které jsou dostatečně blízko UTC, že se denní hodnota nezmění uprostřed typického pracovního dne, ale například v Kalifornii se změna dne nezmění dojde v 16:00 PST, což může být nepohodlné. Představuji si, že Australany by zvláště naštvalo, kdyby se hodnota dne změnila pozdě ráno.

Pokud to chceme opravit, musíme před dělením po sekundách/den přidat offset od UTC. Naštěstí příkaz data v Linuxu obsahuje %z sekvence formátu, která hlásí posun od UTC. Zatímco standardní formát (tento výsledek je pro denverský čas, MDT):

$ date +%z
-0600

. . . není přímo použitelný ve výpočtu, správné modifikátory přinesou to, co chceme:

$ date +%-:::z
-6

Dejte to dohromady s obvyklými převody sekund/hodin/dní a domnívám se, že následující by měly vypsat dny od 1.1.1970, přičemž 1.1.1970 je samotný den nula a hodnota se zvyšuje o půlnoci místního času:

echo $(( ( $(date +"%s + ( %-:::z * 3600)") ) / 86400 ))

Tento jednoduchý výpočet nebude fungovat pro časová pásma, která nejsou posunuta od UTC o celé hodiny (např. Indie, TZ=Asie/Kolkata), protože „+5:30“ vytváří date +%-:::z při použití ve výše uvedeném příkazu vytvoří chybu "neplatný znak ve výrazu".


Linux
  1. Jak nainstalovat NetBeans IDE 7.1 na CentOS 6.2/6.1/6.0 / CentOS 5.7

  2. Rychle vypočítat rozdíly v datech?

  3. Práce se sloupci – Awk a Sed?

  1. vypočítat celkový použitý prostor na disku soubory staršími než 180 dní pomocí funkce find

  2. odečíst dny od data v bash

  3. Převeďte datum ISO na sekundy od epochy v linux bash

  1. Nainstalujte LibreOffice 3.5 na CentOS 6.2/6.1/6.0 / CentOS 5.7

  2. Spočítat počet dní do platby?

  3. Hrajete Quake 1/2 na Linuxu?