آموزش‌های خط فرمانی

این وبلاگ تلاش می‌کند گامی در حد بضاعت در جهت آموزش خط فرمان و اسکریپت‌نویسی پوسته گنو-لینوکس بردارد.

آموزش‌های خط فرمانی

این وبلاگ تلاش می‌کند گامی در حد بضاعت در جهت آموزش خط فرمان و اسکریپت‌نویسی پوسته گنو-لینوکس بردارد.

محاسبه اختلاف بین دو تاریخ معین


چگونه اختلاف بین دو تاریخ را به دست آورم؟

بهترین کار آنست که در سراسر کُد خود با نشانه‌های زمان (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 را ببینید.)


CategoryShell

پرسش و پاسخ 102 (آخرین ویرایش ‎2010-07-30 13:46:05‎ توسط GreyCat


نظرات 0 + ارسال نظر
ایمیل شما بعد از ثبت نمایش داده نخواهد شد