Официальная возможность получить лицензионный софт бесплатно.
Giveaway of the Day
Это не реклама!

Щелкните для получения прогноза по Биробиджану


Показаны сообщения с ярлыком время. Показать все сообщения
Показаны сообщения с ярлыком время. Показать все сообщения

пятница, 15 марта 2019 г.

bash: разница между двумя моментами времени

Есть у нас хитрая система учета рабочего времени, которая требует указывать продолжительность выполненных работ исключительно в минутах. Например, с 8:45 до 13:30 я был на выезде. Вопрос: сколько минут я должен записать?

Не, оно, конечно, несложно - "без 15 минут 5 часов", то есть, 4 часа 45 минут или 285 минут.
Но в гробу я видал заниматься временнОй арифметикой в уме - у меня есть и более интересные занятия. Поэтому написал небольшой не оптимизированный скрипт без наворотов, который чисто средствами баша считает разницу в минутах (и не только) между двумя моментами времени в пределах одних суток. Допиливать его под переход суток и т.п. мне лень, допилю, когда и если понадобится.

(примечание: между двумя вхождениями "Descriptions" идет длинный коммент в стандарте heredocs - см. руководство по башу, чтобы не ставить кучу диезов)

#!/bin/bash
<
<<Descriptions
 timediff - разница между двумя временами в пределах суток
 $1 - начальное время
 $2 - конечное время

 Формат параметров:
 ч:м[:с]
 ведущие нули не обязательны, но если нужно указать только минуты, то ноль часов указывать обязательно:
 :12:34 - неправильно
 0:12:34 - правильно

 Проверки на допустимость параметров не делаются, поэтому в случае чего вываливается с ошибкой "смените пользователя"

Descriptions

# с учетом возможной переделки, используем переменные для времен
# пока что $TimeX и $n - одно и то же, но в будущем это может измениться
TimeS=$1
TimeF=$2

# TimeStamp Start/Finish
TSS=$( date +%s -d $TimeS )
TSF=$( date +%s -d $TimeF )

# Разница в секундах, целых минутах, целых часах
DiffS=$(( $TSF-$TSS ))
DiffM=$(( $DiffS/60 ))
DiffH=$(( $DiffM/60 ))
# Сколько секунд сверх целых минут и минут сверх целых часов
ExtraS=$(( $DiffS-$DiffM*60 ))
ExtraM=$(( $DiffM-$DiffH*60 ))

# продолжительность в разных единицах
echo ${DiffS}s
echo ${DiffM}m
echo ${DiffH}h

# в минутах и секундах (минут может быть больше 60)
echo ${DiffM}:${ExtraS}"(m:s)"
# в часах, минутах и секундах
echo ${DiffH}:${ExtraM}:${ExtraS}"(h:m:s)"

Например:

$ timediff.sh 8:45 13:30
17100s
285m
4h
285:0(m:s)
4:45:0(h:m:s)


понедельник, 20 января 2014 г.

ADDS: error 0x800704b8 не подключаются диски

Позвонил пользователь: не мапятся сетевые диски, которые раньше прекрасно мапились.
Стандартные виндовые журналы и gpupdate/force вкупе с gpresult/z ничего интересного не дали: есть event ID: 4098, есть код ошибки 0x800704b8, и есть офигенно полезное описание "ошибка расширенного типа".

Не трахая мозги: на компе пользователя часы убежали минут на 10 вперед, из-за чего файловые самба-серверы и контроллеры домена сильно расстроились.
Вылечилось командой

net time /domain:мой_домен /set /yes

понедельник, 11 марта 2013 г.

SQUID access.log: преобразование времени

Сквид в своем логе пишет время в формате UNIX, что ни разу не есть удобно для чтения.
Где-то я уже разбирался с преобразованием времени, но для анализа конкретно этого лога нашлось такое решение:

grep rush access.log|perl -nwe's/^(\d+)/localtime($1)/e; print'

В данном случае ищем в логе обращения к сайту, содержащему в имени последовательность "rush" и выводим в найденных строках время по-человечески.

Но для одноразовой конверсии лучше воспользоваться стандартной командой date:

$ date --date='@1362981179.186'
Пн. марта 11 16:52:59 VLAT 2013


После "@" вписываем время из лога в формате UNIX. И телемаркет!

суббота, 19 февраля 2011 г.

О времени

Говорят, что медленнее всего время тянется во время тестирования crontab. Могу добавить: не быстрее оно тянется и при переносе нетваревского тома с одного диска на другой с помощью штатного зеркалирования. Том в несчастные 20 гигов переносится уже с полчаса и сделано только 34 процента...