Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Отсчёт времени от события  (Прочитано 3183 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн S.D. aka Xvost

  • Автор темы
  • Активист
  • *
  • Сообщений: 414
    • Просмотр профиля
Отсчёт времени от события
« : 03 Октября 2022, 12:51:24 »
Нужен скрипт отсчёта времени от события. С выводом уведомления раз в сутки "От ххх прошло хх лет, хх месяцев, хх дней, хх часов, хх минут". Может мне кто-либо более опытный набросать примерный код скрипта, а там я уже буду иметь хотя бы представление, с чем разбираться?
Dell Inspiron 5758; Intel© Pentium© 3805U @ 1.90GHz × 2; Mesa Intel HD Graphics (BDW GT1)
Linux Mint 21 Cinnamon

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 3026
    • Просмотр профиля
Re: Отсчёт времени от события
« Ответ #1 : 03 Октября 2022, 13:40:32 »
Для этого надо знать, что за событие и как оно ловится. Когда оно возникает,
то создать файл, изменить его как угодно и больше его не трогать,
а потом в любое время можно будет отсчитать время от его последнего последнего
изменения до текущего.
Пётр.

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6690
  • 20% Cooler
    • Просмотр профиля
Re: Отсчёт времени от события
« Ответ #2 : 03 Октября 2022, 14:10:15 »
1. Вычислить разницу в секундах между датами
DIFF=$(( $(date --date="03/31/22 00:00:01" +%s) - $(date --date="03/31/21 00:00:01" +%s) ))
2. Конвертировать секунды в нужный вам формат.
printf 'Прошло %0d дней %02d часов %02d минут %02d секунд' $(( DIFF/86400)) $((DIFF%86400/3600)) $((DIFF%3600/60)) $((DIFF%60))
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн qpdb

  • Активист
  • *
  • Сообщений: 619
  • xUbuntu 22.04
    • Просмотр профиля
Re: Отсчёт времени от события
« Ответ #3 : 03 Октября 2022, 22:49:28 »
Можно ещё, наверное, через formats a date as Unix time
date +%s
или более подробно
date +%s%4N
Четвёрка там для примера, обычно такой точности бывает достаточно…
date +%s%4N
16648264224235

2022 Oct 03; 03:49 PM
Рекомендую ознакомиться с современной трактовкой темы „collective responsibility and the state”, а также темами сопряжёнными с этой… В современных реалиях это может оказаться полезным…

Оффлайн просто Евгений

  • Активист
  • *
  • Сообщений: 396
  • Мы уже идем к вам...
    • Просмотр профиля
Re: Отсчёт времени от события
« Ответ #4 : 04 Октября 2022, 07:19:53 »
Чисто теоретически, необходимо перевести григорианскую дату в юлианскую с дробной частью суток. Тогда разница будет равна колличеству дней, а дробную часть суток перевести в часы, минуты, секунды. :)
Поговори, хоть ты со мной, гитара, семиструнная...

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: Отсчёт времени от события
« Ответ #5 : 13 Ноября 2022, 21:42:32 »
Для себя как-то такую функцию налепил :):
Conv_secs(){
awk 'BEGIN{
s = ARGV[1] + 0
s_start = s
day = 86400; hour = 3600; minute = 60
if (s >= day) {
f = s%day; days = (s-f)/day; s = f;    day_word = "деней"
days ~ /.*1.$/ || days ~ /.*1$/ &&     day_word = "день"
days ~ /.*1.$/ || days ~ /.*[2-4]$/ && day_word = "дня"
r = r days" "day_word
}
if (s >= hour)   { f = s%hour   ; hours = (s-f)/hour ;     s = f ; if(length(r)>0){r = r " "} ; r = r hours " час."   }
if (s >= minute) { f = s%minute ; minutes = (s-f)/minute ; s = f ; if(length(r)>0){r = r " "} ; r = r minutes " мин." }
if (s > 0)                                                       { if(length(r)>0){r = r " "} ; r = r s " сек."       }
if (s_start == 0) { r = "0 сек." }
print r
}' $1
}

 

Страница сгенерирована за 0.038 секунд. Запросов: 22.