Перетворіть системний час Linux на добре формат дати


11

Я хочу відображати /proc/uptimeу добре форматі як:

DD:HH:MM:SS

/proc/uptime дайте мені час роботи системи в секундах, чи є стандартне рішення, яке перетворює секунди у цей формат?

Відповіді:


15

Ось спосіб без perl:

awk '{printf("%d:%02d:%02d:%02d\n",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}' /proc/uptime

1
Чудова відповідь. \n для нового рядка було б добре!
ankit7540

4

Ви можете зробити це, наприклад, за допомогою perl та простої математики:

cat /proc/uptime |  perl -ne '/(\d*)/ ; printf "%02d:%02d:%02d:%02d\n",int($1/86400),int(($1%86400)/3600),int(($1%3600)/60),$1%60' 

Якщо секунди вам не потрібні, ви можете просто запустити uptimeкоманду. Потім його вихід може бути просто перетворений в DD: HH: MM.

Наприклад, використання (працює таким чином, лише якщо тривалість> 1 год)

 uptime | perl -ne '/(\d*) day[^\d]*(\d*):(\d*)/ ; printf "%02d:%02d:%02d\n", $1, $2, $3'

3

Ні, тому що це насправді не важка проблема. Розділіть кількість секунд на 86400, використовуючи ціле ділення, щоб отримати кількість днів. Візьміть решту і розділіть це на 3600, щоб отримати кількість годин. Решту цього поділіть на 60, щоб отримати кількість хвилин, і вам залишилося кількість секунд. Все це можна зробити з оболонки за допомогою exprкоманди, якщо ваша оболонка є досить стародавньою для того, щоб не підтримувати арифметику спочатку

Визначити кількість секунд після епохи і перетворити їх на людину, читану датою, є важкою проблемою, і тому існують стандартні способи зробити це, наприклад, date -r SECONDSз оболонки. Але це вже інша проблема.


3

Адаптація відповідної частини цієї відповіді .

Поки ваш час роботи менше року, ви можете використовувати таку команду:

TZ=UTC date -d@$(cut -d\  -f1 /proc/uptime) +'%j %T' | awk '{print $1-1"d",$2}'

Я витягую перше поле файлу uptime, оскільки принаймні в моєму Linux є друге поле, що містить загальний час простою. Я сприймаю це як кількість секунд після епохи, і перетворюю це на день року з наступним часом у годинах, хвилинах і секундах. Оскільки день року починається з одиниці, я віднімаю один із цього в остаточному awkвиклику.


2
$ s=12345678
$ printf '%d:%02d:%02d:%02d\n' $((s/86400)) $((s/3600%24)) $((s/60%60)) $((s%60))
142:21:21:18

Перетворення секунд з епохи в дату та час:

$ gdate -d @1234567890 '+%F %T' # GNU date
2009-02-14 01:31:30
$ date -r 1234567890 '+%F %T' # BSD date
2009-02-14 01:31:30
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.