TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #308 1.19K
Работа с датами и интервалами времени без внешних утилит

Как работать с датами и временем, если нельзя использовать date, awk, python, jq и т.п. - только встроенные средства? Такое бывает в ограниченных окружениях (initrd, контейнеры, busybox). Что остается? Только POSIX-переменные, арифметика и системный вызов времени через /proc.

▪️ Получение текущего времени в секундах (POSIX timestamp)


now=$(</proc/uptime) # uptime в секундах с долей
timestamp=$(cut -d. -f1 <<< "$now") # отбрасываем дробную часть
echo "Uptime (сек): $timestamp"


Но если доступен Bash ≥ 4.2, можно так:


now=$(printf '%(%s)T\n' -1) # текущий timestamp


▪️ Расчет интервала (например, сколько секунд назад)


start=1721133000
now=$(printf '%(%s)T\n' -1)
delta=$((now - start))
echo "Прошло $delta секунд"


▪️ Преобразование секунд в формат ЧЧ:ММ:СС


secs=9384 # Пример: 2 ч, 36 мин, 24 сек

printf -v hh '%02d' $((secs / 3600))
printf -v mm '%02d' $(((secs % 3600) / 60))
printf -v ss '%02d' $((secs % 60))

echo "$hh:$mm:$ss"


▪️ Проверка "дата в будущем/прошлом"


deadline=1721190000
now=$(printf '%(%s)T\n' -1)

if (( now > deadline )); then
echo "Просрочено"
else
echo "Еще в сроке"
fi


▪️ Простая "через N секунд"


wait_for=$((60 * 5)) # 5 минут
start=$(printf '%(%s)T\n' -1)

while true; do
now=$(printf '%(%s)T\n' -1)
(( now - start >= wait_for )) && break
sleep 1
done

echo "Прошло 5 минут"


▪️ Мини-фреймворк времени без date. Если date нет вообще, можно использовать /proc/uptime как источник времени с начала загрузки. Это полезно в init-сценариях и embedded-системах.


get_now() {
cut -d. -f1 /proc/uptime
}


Даже без date, python и awk можно: считать интервалы, вычислять прошедшее время, форматировать в ЧЧ:ММ:СС, сравнивать сроки и "таймерить". Это помогает писать portable-скрипты под ограниченные окружения.

BashTex 📱 #bash
  • 👍 12
More from @bash_tex
  1. Oct 9, 2026BashTex 📱 #мем
  2. Oct 8, 2026Bridge FDB - как Linux bridge узнаёт, где находится MAC Linux bridge не знает заранее, за…
  3. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  4. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  5. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  6. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →