LINUX.ORG.RU

Посчитать количество будних дней в месяце

 ,


0

1

Есть отличный способ используя команду ncal:

https://linuxconfig.org/how-to-list-only-work-days-using-shell-command-line-on-linux

Передавая в качестве параметра номер месяца и год можно узнать число будних дней для любого месяца.

ncal -hM 9 2020 | grep -vE "^S|^ |^$" | sed "s/[[:alpha:]]//g" | fmt -w 1 | sort -n | wc -l
22

Это все прекрасно работает до попытки использования в рэдхэт или центос. Там ncal нет, а есть только cal и основное отличие в том, что ncal выводит дни строками, а cal - колонками. Соответственно в ncal строки с выходными можно легко срезать кучей способов:

ncal -hM 9 2020 
    September 2020
Mo     7 14 21 28
Tu  1  8 15 22 29
We  2  9 16 23 30
Th  3 10 17 24
Fr  4 11 18 25
Sa  5 12 19 26
Su  6 13 20 27

А в cal какого-то надежного способа придумать не получилось:

cal -m $(date +%m -d 'last month') 2020    
   September 2020   
Mo Tu We Th Fr Sa Su
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 

нужно для Centos8.

★★
Ответ на: комментарий от anonymous

Ты забыл про високосную секунду, которая может как добавляться, так и отниматься. Дальше не читал.

В UNIX time всегда 86400 секунд на день. В случае високосных секунд время приостанавливается или перескакивает на секунду.

https://stackoverflow.com/a/16539483

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 2)
Ответ на: комментарий от X512

@crutch_master

Да, действительно. Был неправ. Глубоко извиняюсь.

$ TZ=UTC date -d '10/20/2020' +%s
1603152000
$ echo 'scale=6; 1603152000/86400' | bc
18555.000000
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.