GNU/Linux >> Znalost Linux >  >> Linux

Rychle vypočítat rozdíly v datech?

Často chci provést nějaké rychlé výpočty data, jako například:

  • Jaký je rozdíl mezi těmito dvěma daty?
  • Jaké je datum n týdnů po tomto jiném datu?

Obvykle otevřu kalendář a počítám dny, ale myslím, že by měl existovat program/skript, který bych mohl použít k provádění těchto druhů výpočtů. Nějaké návrhy?

Přijatá odpověď:

„N týdnů po datu“ je snadné s GNU date(1):

$ date -d 'now + 3 weeks'
Tue Dec  6 23:58:04 EST 2011
$ date -d 'Aug 4 + 3 weeks'
Thu Aug 25 00:00:00 EST 2011
$ date -d 'Jan 1 1982 + 11 weeks'
Fri Mar 19 00:00:00 EST 1982

Nevím o jednoduchém způsobu, jak vypočítat rozdíl mezi dvěma daty, ale můžete kolem data(1) zabalit trochu logiky pomocí funkce shell.

datediff() {
    d1=$(date -d "$1" +%s)
    d2=$(date -d "$2" +%s)
    echo $(( (d1 - d2) / 86400 )) days
}
$ datediff '1 Nov' '1 Aug'  # Note: answer should be 92 days but in my timezone, DST starts between the dates.
91 days

Vyměňte d1 a d2 chcete-li výpočet data jiným způsobem, nebo si to trochu vylepšit, aby na tom nezáleželo. Kromě toho v případě, že v intervalu dojde k přechodu z jiného než DST na DST, bude jeden ze dnů trvat pouze 23 hodin; můžete to kompenzovat přidáním ½ dne k součtu.

echo $(( (((d1-d2) > 0 ? (d1-d2) : (d2-d1)) + 43200) / 86400 )) days

Linux
  1. Správa zásad hesel

  2. Příklady příkazů date v Linuxu

  3. datum:příkaz nenalezen

  1. Použijte awk k výpočtu frekvence písmen

  2. Porovnání dat v Bash

  3. Bash:vypočítá čas, který uplynul mezi dvěma časovými značkami

  1. Dd se dokončí neuvěřitelně rychle?

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

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