LINUX.ORG.RU

Bash: Разница двух дат в количестве дней


0

0

Есть скрипт, в него среди всех входных параметров подаются две даты в формате: ДД.ММ.ГГ .Необходимо вычислить разницу этих двух дат в количестве дней. Всё было бы просто если бы работала функция date с флагом -d, но у меня на работе функция date имеет в наличии лишь флаги -u и -a. Нашёл вариант рещения своей задачи в Advanced Bash-Scripting Guide: http://www.opennet.ru/docs/RUS/bash_scripting_guide/a14477.html#DAYSBETWEEN . Но там слишком много операций, в то время как у меня на работе требуют, как можно меньше операций и соответсвтенно более быстрое выполнение действия, но в тоже время необходима точность, ибо скрипт будет работать с банковскими пластиковыми картами. Сам уже перегуглил вроде всё что можно, но до сих пор ничего толкового не нашёл. Есть правда и такой вариант: Посчитать отдельно сутки*24*3600, (месяц-1)*30*24*3600, (год-1)*365*24*3600, а потом сравнивать разницу с 365*3600 и делать выводы. Но тут всё равно будет много операций, нужно ещё меньше. Поэтому и прошу совета, может у кого есть идеи, как можно это реализовать ещё лучше. Хочу сразу сказать в задании чётко указано использовать только bash, тотже самый пёрл и его функции использовать нельзя. PS. Заранее спасибо.

Что еще за "операции" ? Ты думаешь date -d делает мешьше этих "операций" ? У тебя обычное непонимание всего. Я больше не хочу пользоваться пластиковыми картами.

anonymous
()

>в то время как у меня на работе требуют, как можно меньше операций

А скорость "операций" важна?:)

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

>А скорость "операций" важна?:)

учитывая полностью дилетантскую формулировку требований начальством - вряд ли.

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

> Ты думаешь date -d делает мешьше этих "операций" ?

date на сях написан, те же операции в шелле медленнее даже не в сто раз.

PS Можно узнать какой это банк? Или на счёт банка ты пошутил?

true_admin ★★★★★
()

>функция date с флагом -d, но у меня на работе функция date имеет в наличии лишь флаги -u и -a

SCO?

>ибо скрипт будет работать с банковскими пластиковыми картами

Сбербанк?

anonymous
()

> Есть скрипт > оответсвтенно более быстрое выполнение действия

Противоречие детектед

> скрипт будет работать с банковскими пластиковыми картами

Спасибо что предупредил. Срочно все счета перевожу в кэш.

anonymous
()

>но у меня на работе функция date имеет в наличии лишь флаги -u и -a.

Поставь на работу date, который умеет.

DonkeyHot ★★★★★
()

Был у меня код на C для вычисления разницы между датами с учетом високосности (достаточно простой). Если найду, выложу.

Вам нужно будет только собрать да и все тут.

MageWarrior
()

Ну можете предложить вариант с использованием массивов.
В один массив загоняете кол-во дней от начало отсчета до 1-го января года, допустим:
a=(0 366 731) и используете ГГ как индекс по этому массиву.
Подразумевается, что скрипт должен работать в небольшом диапазоне дат, допустим 2000-2100.

Другим массивом переводите месяц в число дней от начала года b=(0 31 59)
И список, котоый содержит все високосные года, если месяц > 2 и год в этом списке, то добавляем ещё один день.
Каждую дату переводим в число дней от начала отсчёта и определяем разность.

P.S. Пластиковой карточки нет и наверное не будет.

mky ★★★★★
()

В формулировках не силён. Задание какое есть. Было чётко сказано только; 1) Использовать только bash. 2) Важна как скорость работы так и точность. PS. Я и не говорил что, я такой профессионал, я только учусь. Много не знаю. Потому и попросил помощи.

Naruto-kun
() автор топика
Ответ на: комментарий от Naruto-kun

>2) Важна как скорость работы так и точность.

Вот видишь, скорость работы, а не какие-то "операции".

anonymous
()

Как уже сказал, я не силён в формулировках. :-[ Прошу прощения, за некорректно составленный вопрос.

Naruto-kun
() автор топика
Ответ на: комментарий от MageWarrior

Да-да, у меня тоже есть быстрый бинарник, который будет невероятно быстро даты считать. Только ему обязательно на входе еще и номер счета вводить, с которым выполняется банковская операция. Устроит?

anonymous
()

Да, почему бы и нет, скинь плз на мыло matveef@inbox.ru Гляну, что да как, переделать скрипт не проблема если, что.

Naruto-kun
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.