GNU/Linux >> Znalost Linux >  >> Linux

Jak Coreutil's Date dokáže získat tak podivné výsledky?

Hrál jsem si s date pokusit se převést výrazy jako „2 hodiny“ na počet sekund, jako je 7200. Myslel jsem, že bych to mohl provést pomocí vyvolání jako:

date -d "1970-01-01 00:00:00 + 2 hours" +"%s"

Přesto jsem si při tom všiml mimořádně podivných výsledků. (Můj /etc/timezone obsahuje „Evropa/Paříž“, proto se používá TZ vynutit časy UTC.)

omega:~$ TZ=utc date -d "1970-01-01 00:00:00" +"%s"             
0
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + 0 minutes" +"%s"
60
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + -1 minutes" +"%s" 
3660
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + 1 minutes" +"%s" 
-3540

První výsledek je dostatečně rozumný, ale jsem opravdu úplně zmatený tím, jak date mohl přijít s posledními třemi výsledky. Rozumí někdo logice mezi těmito výsledky?

Přijatá odpověď:

Myslím, že to bere vaše + x jako specifikátor časového pásma (např. zvažte 2013-04-25 19:52:36 +4 je platné časové razítko v časovém pásmu 4 hodiny před UTC).

Potom vidí slovo „minuty“ a považuje je za synonymum minuty, takže vám poskytne jednu minutu později.

Pokud vložíte explicitní specifikátor časového pásma, funguje to:

[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC" +"%s"   
0
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 0 minutes" +"%s"
0
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + -1 minutes" +"%s" 
-60
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 1 minutes" +"%s" 
60

Všimněte si UTC po sekundovém poli. Můžete také zadat druhé +0 :

[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 +0 + -1 minutes" +"%s"
-60

…ale alespoň osobně je to mnohem těžší číst.

Nebo můžete zadat Z po sekundách atd. TZ ve skutečnosti nepotřebujete proměnná prostředí, která má být ve výše uvedených příkladech nastavena na UTC.


Linux
  1. Jak zkontrolovat časové pásmo v Linuxu

  2. Jak zjistit využití CPU

  3. Jak dostat ps do tiskové skupiny?

  1. Jak udělat Ls a pak seřadit výsledky podle data vytvoření?

  2. Jak získat datum vypršení platnosti uživatelského hesla z Active Directory?

  3. Jak Linux přiděluje šířku pásma mezi procesy?

  1. Linux – Jak zjistit datum vytvoření souboru na logickém svazku Ntfs?

  2. Jak získat pouze soubory vytvořené po rande s Ls?

  3. Jak získat formátovaný datum a čas v pythonu