کار با زمان در پایتون

عنصر زمان در توسعه برنامه‌های مختلف، استفاده‌های گوناگونی دارد. ممکن است بخواهیم زمان ارسال درخواست را بررسی کنیم. یا در هنگام اجرای برنامه، وقفه ایجاد کنیم. در این مقاله قصد داریم به آموزش کار با زمان در پایتون بپردازیم. از ماژول time در پایتون استفاده کرده و با توابع مختلف آن آشنا شویم.

زمان در سیستم‌های کامپیوتری

همانطور که ممکن است بدانید، زمان در سیستم‌های کامپیوتری با ثانیه سنجیده می‌شود. همه زمان ها یک مبدأ زمانی دارند. مبدا زمان کامپیوترها یکم Jan سال 1970 میلادی ساعت 00:00 بامداد است.

زمان در کامپیوتر به صورت ثانیه‌های گذشته شده از ساعت مبدا محاسبه می‌شود. سپس با تبدیل محاسباتی خاص، می‌توان آن‌را تبدیل به ساعت‌ها و تاریخ کرد.

ماژول ها و کتابخانه های متعددی برای کار با زمان در پایتون وجود دارند. اکثراً برای کاربرد خاصی در برنامه نویسی استفاده می‌شوند.

یکی از اصلی ترین این ماژول‌ها که به صورت پیشفرض همراه با پایتون در اختیار قرار می‌گیرد کتابخانه time است.

این کتابخانه توابعی مختلفی برای دریافت زمان فعلی سیستم، محاسبه زمان‌ها و ایجاد وقفه در اختیار ما قرار می‌دهد.

در ادامه مقاله به بررسی کار با ماژول time در پایتون خواهیم پرداخت.

 

کتابخانه time برای کار با زمان در پایتون

برای استفاده از این ماژول ابتدا باید آن‎را وارد برنامه کنیم.

حال می‌توانیم با صدا زدن توابع مختلف روی time کارهای مربوط به زمان را انجام دهیم.

 

دریافت زمان فعلی سیستم

اولین و یکی از پر کاربردترین توابعی که در این ماژول وجود دارد، تابع time() است. این تابع، زمان فعلی سیستم را به ما خروجی می‌دهد. خروجی به صورت float بوده و همان ثانیه های سپری شده از مبدا می‌باشد.

 

زمان فعلی همراه با تاریخ امروز

تابع دیگر از ماژول time در پایتون، تابع localtime() است. این تابع یک شئ از نوع time.struct_time باز می‌گرداند. این شئ در اصل یک tuple (یا چند تایی) حاوی اطلاعاتی از زمان حال است.

 

عناصر این لیست به ترتیب و با توجه به اسم آن‌ها عبارتند از:

  • tm_year   : سال به میلادی
  • tm_mon   : ماه جاری
  • tm_mday : شماره روز ماه (مشخص کننده چندم ماه)
  • tm_hour  : ساعت فعلی
  • tm_min   : دقیقه زمان حال
  • tm_sec    : ثانیه زمان
  • tm_wday : شمارش روز هفته (چندمین روز هفته جاری با احتساب دوشنبه معادل 0)
  • tm_yday  : شمارش روز سال (امروز چندمین روز سال است ؟)
  • tm_isdst  : مشخص کننده فعال بودن ساعت تابستانی (daylight)

می‌توانیم این شئ را در متغیری ذخیره کرده و از ویژگی های آن استفاده کنیم. برای مثال در قطعه کد زیر، سال و شمارنده روز سال را چاپ کرده ایم.

تبدیل ثانیه به ساعت و تاریخ روز

دیدیم که به کمک تابع time() می‌توانیم زمان را به صورت ثانیه گرفته و نگه داریم. حال ممکن است یک مقدار عددی (ثانیه) داشته باشیم که بخواهیم آن‌را تبدیل به زمان کنیم.

برای این کار از تابع ctime() در کتابخانه زمان پایتون استفاده خواهیم کرد.

اگر هیچ مقداری به عنوان ورودی تابع به آن ندهیم، به صورت پیشفرض زمان حال را خروجی میدهد.

 

تبدیل زمان و تاریخ خاص به ثانیه

فرض کنید یک تاریخ و زمان خاصی را داشته باشیم و بخواهیم معادل ثانیه آن‌را محاسبه کنیم. برای این کار از تابع mktime() کمک خواهیم گرفت.

این تابع یک tuple به عنوان ورودی می‌گیرد که ساختارش می‌بایست مشابه ساختار خروجی تابع localtime() باشد.

 

در اصل این تابع برعکس تابع localtime() عمل می‌کند.

 

چاپ زمان با فرمت خاص زمان در پایتون

در اکثر اوقات در کار با زمان در پایتون نیاز داریم یک زمان را با فرمت خاصی نمایش دهیم. برای این کار می‌توان از تابع strftime() استفاده کرد.

این تابع دو ورودی دارد.

  • ورودی اول به صورت رشته ای مشخص کننده فرمت دلخواه ماست.
  • ورودی دوم یک تاپل (tuple) مشخص کننده زمان مورد نظر ما می‌باشد.

 

نمادهایی که در رشته مشخص کننده فرمت خروجی استفاده می‌شوند، نمادهایی هستند که برای مشخص کردن زمان استفاده می‌شوند.

اگر دوست دارید با تمام نمادهای ممکن برای زمان در پایتون آشنا شوید، می‌توانید به جدول نمادهای زمان پایتون در این لینک مراجعه نمایید.

 

تبدیل زمان با فرمت به ثانیه

اگر بخواهیم عکس عمل قبلی را انجام دهیم، از تابع strptime() استفاده خواهیم کرد. این تابع دو ورودی از ما می‌گیرد.

  • ورودی اول به صورت رشته و مشخص کننده فرمت زمان ورودی است.
  • ورودی دوم به صورت رشته و زمان مورد نظر ما است.

 

اگر ساعت در مقدار وارد شده مشخص نباشد، صفر در نظر گرفته می‌شوند.

 

ایجاد وقفه در اجرای برنامه با تابع sleep زمان در پایتون

گاهی اوقات در توسعه برنامه‌ها نیاز داریم برنامه را برای مدتی مشخص متوقف کنیم. برای مثال یک کار حتماً می‌بایست 45 ثانیه بعد از اتمام فعالیتی دیگر، انجام شود.

یا در برنامه نویسی خزنده های وب (Web Crawler) برای جلوگیری از مسدود شدن فعالیت ربات، بهتر است وقفه هایی به صورت تصادفی به خزنده داده شود.

برای وقفه دادن به برنامه ی در حال اجرا، از تابع sleep() در ماژول time استفاده می‌کنیم.

ورودی این تابع یک عدد است که مقدار ثانیه وقفه اجرا را مشخص می‌کند.

تعریف delay تصادفی در پایتون

برای اینکه مقدار تاخیر (وقفه) اجرای برنامه به صورت تصادفی تعریف شود، می‌توان به آسانی از یک مقدار Random استفاده کرد.

قطعه کد زیر در هر بار اجرای حلقه تکرارگر، به صورت تصادفی از 1 تا 2 دقیقه استراحت می‌کند.

راهکار ذخیره زمان در برنامه نویسی

تا این جای کار با انواع توابعی که برای کار با زمان در پایتون استفاده بیشتری دارند را بررسی کردیم. اما ممکن است برای ذخیره سازی زمان مقداری سر در گم شده باشیم!

روش های زیادی برای ذخیره سازی زمان وجود دارد. دو راهکار ساده و متداول آن‌را به مختصر بررسی میکنیم.

1- ذخیره ثانیه زمان مورد نظر

در این حالت تمام مقادیر زمانی ما به صورت یک عدد که مشخص کننده ثانیه سپری شده از مبدأ است را ذخیره می‌کنیم. هرگاه نیاز بود، می‌توان آن‌را با روش های گفته شده به رشته (string) قابل خواندن تبدیل کرد.

مزیت این روش مقایسه بسیار راحت زمان ها با یکدیگر است! برای مقایسه کوچکتر یا بزرگتری دو زمان، کافی است آن دو عدد را با هم مقایسه کنیم!

 

2- ذخیره زمان قابل خواندن برای انسان

در این حالت، در اصل فرمت قابل خواندن توسط انسان را در پایگاه داده خود ذخیره می‌کنیم.

این راه حل بررسی جداول داده را راحت‌تر خواهد کرد. همچنین برای برنامه هایی که نیاز به نمایش زمان های مختلف ذخیره شده داریم، بهینه تر خواهد بود.

 

جمع بندی: کار با ساعت در پایتون و ماژول time

در این مقاله به بررسی کتابخانه time در زبان برنامه نویسی پایتون پرداختیم.

با استفاده از توابع مختلف آن، زمان فعلی سیستم را گرفتیم. همچنین زمان های مختلف را به یکدیگر تبدیل کردیم.

در ابتدا با کاربرد تابع time() آشنا شدیم که زمان فعلی سیستم را به صورت ثانیه های سپری شده خروجی می‌داد. سپس این مقدار را به کمک تابع strftime() به فرمت قابل خواندن تبدیل کردیم.

در ادامه با تابع sleep() در اجرای برنامه خود وقفه ایجاد کردیم. در انتها نیز به بررسی روش های ذخیره زمان در برنامه نویسی پرداختیم.

 

شما چه تکنیک هایی برای کار با زمان در پایتون استفاده می‌کنید؟ لطفا آن‌را از طریق دیدگاه ها با دیگران به اشتراک بگذارید!