Форум программистов, компьютерный форум, киберфорум
Наши страницы
Shell, Bash
Войти
Регистрация
Восстановить пароль
 
PlayRW
0 / 0 / 0
Регистрация: 07.01.2017
Сообщений: 1
1

Вывести количество дней в заданном месяце заданного года

06.12.2018, 16:40. Просмотров 92. Ответов 11

Здравствуйте. Нужна помощь. Нужно написать скрипт на BASH, на вход которому даётся год и месяц. Нужно, чтобы скрипт выводил кол-во дней в месяце. Доп условие, проверка на високосный год(не обязательна). Спасибо)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2018, 16:40
Ответы с готовыми решениями:

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

Поиск файлов заданного размера в заданном каталоге (Bash)
Задание :Написать скрипт для поиска файлов заданного размера в заданном каталоге (имя каталога...

Вывести на консоль все месяцы заданного пользователем времени года и количество дней в выбранном месяце
Всем привет!Вот у меня такая задача (короткое описание):программа выводит меню с временами года: 1...

Вывести число дней в заданном месяце для невисокосного года
Дан номер месяца (1 — январь, 2 — февраль, ...). Вывести число дней в этом месяце для не...

Вывести число дней в заданном месяце для невисокосного года
3. Дан номер месяца (1 — январь, 2 — февраль,...). Вывести число дней в этом месяце для...

11
Marinero
Модератор
Эксперт NIX
2141 / 1722 / 585
Регистрация: 02.03.2015
Сообщений: 5,634
06.12.2018, 17:12 2
Bash
1
i=32;until date -d "$year/$month/$((--i))" &>/dev/null; do true ; done ; echo $i
1
Kukstyler
COBOL Is Everywhere
656 / 410 / 129
Регистрация: 02.04.2009
Сообщений: 1,878
06.12.2018, 23:09 3
Marinero, в CYGWIN не хочет, уходит в минус.

Добавлено через 2 минуты
Зависимость от LOCALE?
0
Marinero
Модератор
Эксперт NIX
2141 / 1722 / 585
Регистрация: 02.03.2015
Сообщений: 5,634
06.12.2018, 23:35 4
Kukstyler, а Вы год - месяц подставляете?
0
Kukstyler
COBOL Is Everywhere
656 / 410 / 129
Регистрация: 02.04.2009
Сообщений: 1,878
07.12.2018, 00:00 5
Marinero, да, конечно. Вот результат:
Bash
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
31
32
33
34
35
[User.User-PC] вћ¤ i=32;until date -d "2018/01/$((--i))"; do true ; done ; echo $i
date: invalid date '2018/02/31'
date: invalid date '2018/02/30'
date: invalid date '2018/02/29'
date: invalid date '2018/02/28'
date: invalid date '2018/02/27'
date: invalid date '2018/02/26'
date: invalid date '2018/02/25'
date: invalid date '2018/02/24'
date: invalid date '2018/02/23'
date: invalid date '2018/02/22'
date: invalid date '2018/02/21'
date: invalid date '2018/02/20'
date: invalid date '2018/02/19'
date: invalid date '2018/02/18'
date: invalid date '2018/02/17'
date: invalid date '2018/02/16'
date: invalid date '2018/02/15'
date: invalid date '2018/02/14'
date: invalid date '2018/02/13'
date: invalid date '2018/02/12'
date: invalid date '2018/02/11'
date: invalid date '2018/02/10'
date: invalid date '2018/02/9'
date: invalid date '2018/02/8'
date: invalid date '2018/02/7'
date: invalid date '2018/02/6'
date: invalid date '2018/02/5'
date: invalid date '2018/02/4'
date: invalid date '2018/02/3'
date: invalid date '2018/02/2'
date: invalid date '2018/02/1'
date: invalid date '2018/02/0'
date: invalid date '2018/02/-1'
date: invalid date '2018/02/-2'
Если в формате ISO, то:
Bash
1
2
3
4
5
6
7
8
9
10
11
[User.User-PC] $: i=32;until date -d "2018-01-$((--i))"; do true ; done ; echo $i
Wed Jan 31 00:00:00     2018
31
 
[User.User-PC] $: i=32;until date -d "2018-02-$((--i))"; do true ; done ; echo $i
Sat Mar  3 00:00:00     2018
31
 
[User.User-PC] $: i=32;until date -d "2018-04-$((--i))"; do true ; done ; echo $i
Tue May  1 00:00:00     2018
31
С Февралём проблемы, и с Апрелем тоже. Если i > дней в месяце, label показывает следующий месяц (Mar, May).
0
Marinero
Модератор
Эксперт NIX
2141 / 1722 / 585
Регистрация: 02.03.2015
Сообщений: 5,634
07.12.2018, 00:45 6
Kukstyler, надо разобраться с форматами date. Если просто без разделителей?
Bash
1
i=32 ; until date -d "201802$((--i))"; do true ; done ; echo $i
0
Kukstyler
COBOL Is Everywhere
656 / 410 / 129
Регистрация: 02.04.2009
Сообщений: 1,878
07.12.2018, 02:32 7
Marinero, та же проблема...

Bash
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
31
32
33
34
35
36
37
[User.UserPC] $: i=32 ; until date -d "201802$((--i))"; do true ; done ; echo $i
date: invalid date '20180231'
date: invalid date '20180230'
date: invalid date '20180229'
date: invalid date '20180228'
date: invalid date '20180227'
date: invalid date '20180226'
date: invalid date '20180225'
date: invalid date '20180224'
date: invalid date '20180223'
date: invalid date '20180222'
date: invalid date '20180221'
date: invalid date '20180220'
date: invalid date '20180219'
date: invalid date '20180218'
date: invalid date '20180217'
date: invalid date '20180216'
date: invalid date '20180215'
date: invalid date '20180214'
date: invalid date '20180213'
date: invalid date '20180212'
date: invalid date '20180211'
date: invalid date '20180210'
date: invalid date '2018029'
date: invalid date '2018028'
date: invalid date '2018027'
date: invalid date '2018026'
date: invalid date '2018025'
date: invalid date '2018024'
date: invalid date '2018023'
date: invalid date '2018022'
date: invalid date '2018021'
date: invalid date '2018020'
date: invalid date '201802-1'
date: invalid date '201802-2'
date: invalid date '201802-3'
date: invalid date '201802-4'
Может быть это CYGWIN хандрит?

Bash
1
2
[User.User-PC] $: date -d "2018-02-30"
Fri Mar  2 00:00:00     2018
Добавлено через 7 минут
А может так? :

Bash
1
cal $MONTH $YEAR | egrep -v [a-z] |wc -w
Bash
1
2
3
4
5
6
7
8
[User.User-PC] $: cal 1 2018 | egrep -v [a-z] |wc -w
31
[User.User-PC] $: cal 2 2018 | egrep -v [a-z] |wc -w
28
[User.User-PC] $: cal 4 2018 | egrep -v [a-z] |wc -w
30
[User.User-PC] $: cal 2 2008 | egrep -v [a-z] |wc -w
29
0
greg zakharov
Покинул форум
2070 / 845 / 245
Регистрация: 07.05.2015
Сообщений: 1,686
07.12.2018, 11:00 8
Kukstyler, если пытаетесь получить количество дней через cal, лучше не гонять данные по каналам, - есть ведь awk:
Bash
1
cal $MONTH $YEAR | awk 'NF {DAYS = $NF}; END {print $DAYS}'
Если же использовать date, одно из возможных решений:
Bash
1
echo $((($(date -u -d "${year}-${month}-1 +1 month" +%s) - $(date -u -d "${year}-${month}-1" +%s)) / 86400))
Полагаю не нужно объяснять, что на месте ${year} и ${month} должны быть год и месяц соответственно.
0
Marinero
Модератор
Эксперт NIX
2141 / 1722 / 585
Регистрация: 02.03.2015
Сообщений: 5,634
07.12.2018, 12:30 9
Kukstyler,
Bash
1
man date
и почитать про форматы --date=
0
Kukstyler
COBOL Is Everywhere
656 / 410 / 129
Регистрация: 02.04.2009
Сообщений: 1,878
07.12.2018, 13:07 10
Marinero, причём формат? Если указываю дату в ISO формате, то команда её принимает. Проблема в :

Bash
1
2
[User.User-PC] $: date -d "2018-02-30"
Fri Mar  2 00:00:00     2018
Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от greg zakharov Посмотреть сообщение
Полагаю не нужно объяснять, что на месте ${year} и ${month} должны быть год и месяц соответственно.
Это Вы мне, или вообще?

0
Marinero
Модератор
Эксперт NIX
2141 / 1722 / 585
Регистрация: 02.03.2015
Сообщений: 5,634
07.12.2018, 13:16 11
Ну что я могу?
Код
~$ date -d "2018-02-30"
date: invalid date ‘2018-02-30’
~$ date -d "2018/02/30"
date: invalid date ‘2018/02/30’
0
Kukstyler
COBOL Is Everywhere
656 / 410 / 129
Регистрация: 02.04.2009
Сообщений: 1,878
07.12.2018, 15:30 12
Marinero, на Ubuntu у меня тоже работает Ваш пример.
Получается всё так и
Цитата Сообщение от Kukstyler Посмотреть сообщение
это CYGWIN хандрит
0
07.12.2018, 15:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2018, 15:30

Оператор множественного выбора: вывести число дней в заданном месяце для невисокосного года
Помогите написать программу пожалуйста Дан номер месяца (1 — январь, 2 — февраль, ...). Вывести...

По номеру месяца для текущего года вывести количество дней в этом месяце
Составить блок-схему алгоритма и программу: 1.3. По номеру месяца для текущего года вывести...

По номеру месяца для текущего года вывести количество дней в этом месяце
Составить блок-схему алгоритма и программу: 1.1. Перераспределить значения переменных X и Y так,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru