بهترین کار آنست که در سراسر کُد خود با نشانههای زمان (timestamps) کار کنید، و سپس برای خروجی، این نشانهها را به شکل قابل خواندن انسانی تبدیل نمایید. اگر شما با ورودی قابل خواندن انسانی سر و کار دارید، پس به چیزی که بتواند آنها را تجزیه کند نیاز خواهید داشت.
استفاده از date گنو، برای مثال:
# (وقت محلی) Jan 1, 2010 به دست آوردن ثانیههای سپری شده از then=$(date -d "2010-01-01 00:00:00" +%s) now=$(date +%s) echo $(($now - $then))
برای چاپ مدت زمان به صورت قابل خواندن انسانی، نیاز به انجام مقداری محاسبه خواهید داشت:
# تعریف تعدادی از ثابتها minute_secs=60 hour_secs=$((60 * minute_secs)) day_secs=$((24 * hour_secs)) # به دست آوردن کل مدت seconds_since=$(($now - $then)) # تفکیک days=$((seconds_since / day_secs)) hours=$((seconds_since % day_secs / hour_secs)) minutes=$((seconds_since % day_secs % hour_secs / minute_secs)) seconds=$((seconds_since % day_secs % hour_secs % minute_secs)) # چاپ شکیل echo "$days days, $hours hours, $minutes minutes and $seconds seconds."
یا، بدون برچسبهای تفصیلی:
# Bash/ksh ((duration = now - then)) ((days = duration / 86400)) ((duration %= 86400)) ((hours = duration / 3600)) ((duration %= 3600)) ((minutes = duration / 60)) ((seconds = duration % 60)) echo "$days days, $hours hours, $minutes minutes and $seconds seconds."
برای تبدیل نشانههای زمان به تاریخ قابل خواندن انسانی، استفاده از نگارشهای اخیرdate گنو:
date -d "@$now"
( برای اطلاعات بیشتر در باره تبدیل نشانههای زمان یونیکس به تاریخ قابل خواندن انسانی پرسش و پاسخ شماره 70 را ببینید.)
پرسش و پاسخ 102 (آخرین ویرایش 2010-07-30 13:46:05 توسط GreyCat