عنصر زمان در توسعه برنامههای مختلف، استفادههای گوناگونی دارد. ممکن است بخواهیم زمان ارسال درخواست را بررسی کنیم. یا در هنگام اجرای برنامه، وقفه ایجاد کنیم. در این مقاله قصد داریم به آموزش کار با زمان در پایتون بپردازیم. از ماژول time در پایتون استفاده کرده و با توابع مختلف آن آشنا شویم.
همانطور که ممکن است بدانید، زمان در سیستمهای کامپیوتری با ثانیه سنجیده میشود. همه زمان ها یک مبدأ زمانی دارند. مبدا زمان کامپیوترها یکم Jan سال 1970 میلادی ساعت 00:00 بامداد است.
زمان در کامپیوتر به صورت ثانیههای گذشته شده از ساعت مبدا محاسبه میشود. سپس با تبدیل محاسباتی خاص، میتوان آنرا تبدیل به ساعتها و تاریخ کرد.
ماژول ها و کتابخانه های متعددی برای کار با زمان در پایتون وجود دارند. اکثراً برای کاربرد خاصی در برنامه نویسی استفاده میشوند.
یکی از اصلی ترین این ماژولها که به صورت پیشفرض همراه با پایتون در اختیار قرار میگیرد کتابخانه time است.
این کتابخانه توابعی مختلفی برای دریافت زمان فعلی سیستم، محاسبه زمانها و ایجاد وقفه در اختیار ما قرار میدهد.
در ادامه مقاله به بررسی کار با ماژول time در پایتون خواهیم پرداخت.
برای استفاده از این ماژول ابتدا باید آنرا وارد برنامه کنیم.
import time |
حال میتوانیم با صدا زدن توابع مختلف روی time کارهای مربوط به زمان را انجام دهیم.
اولین و یکی از پر کاربردترین توابعی که در این ماژول وجود دارد، تابع time()
است. این تابع، زمان فعلی سیستم را به ما خروجی میدهد. خروجی به صورت float بوده و همان ثانیه های سپری شده از مبدا میباشد.
time.time() # 1568285153.2479844 |
تابع دیگر از ماژول time در پایتون، تابع localtime()
است. این تابع یک شئ از نوع time.struct_time
باز میگرداند. این شئ در اصل یک tuple (یا چند تایی) حاوی اطلاعاتی از زمان حال است.
time.localtime() # time.struct_time(tm_year=2019, tm_mon=9, tm_mday=12, tm_hour=15, tm_min=18, tm_sec=28, tm_wday=3, tm_yday=255, tm_isdst=1) |
عناصر این لیست به ترتیب و با توجه به اسم آنها عبارتند از:
میتوانیم این شئ را در متغیری ذخیره کرده و از ویژگی های آن استفاده کنیم. برای مثال در قطعه کد زیر، سال و شمارنده روز سال را چاپ کرده ایم.
now = time.localtime() print( now.tm_year) # 2019 print( now.tm_yday) # 255 |
دیدیم که به کمک تابع time()
میتوانیم زمان را به صورت ثانیه گرفته و نگه داریم. حال ممکن است یک مقدار عددی (ثانیه) داشته باشیم که بخواهیم آنرا تبدیل به زمان کنیم.
برای این کار از تابع ctime()
در کتابخانه زمان پایتون استفاده خواهیم کرد.
time.ctime(1568286074.8505077) # 'Thu Sep 12 15:31:14 2019' |
اگر هیچ مقداری به عنوان ورودی تابع به آن ندهیم، به صورت پیشفرض زمان حال را خروجی میدهد.
فرض کنید یک تاریخ و زمان خاصی را داشته باشیم و بخواهیم معادل ثانیه آنرا محاسبه کنیم. برای این کار از تابع mktime()
کمک خواهیم گرفت.
این تابع یک tuple به عنوان ورودی میگیرد که ساختارش میبایست مشابه ساختار خروجی تابع localtime()
باشد.
t = ( tm_year=2020, tm_mon=7, tm_mday=21, tm_hour=3, tm_min=50, tm_sec=29, tm_wday=1, tm_yday=203, tm_isdst=1 ) time.mktime( t ) #1595287229.0 |
در اصل این تابع برعکس تابع localtime()
عمل میکند.
در اکثر اوقات در کار با زمان در پایتون نیاز داریم یک زمان را با فرمت خاصی نمایش دهیم. برای این کار میتوان از تابع strftime()
استفاده کرد.
این تابع دو ورودی دارد.
current_time = time.localtime() time_string = time.strftime( "%m/%d/%Y %H:%M:%S", current_time ) print(time_string) # 09/12/2019 16:01:21 |
نمادهایی که در رشته مشخص کننده فرمت خروجی استفاده میشوند، نمادهایی هستند که برای مشخص کردن زمان استفاده میشوند.
اگر دوست دارید با تمام نمادهای ممکن برای زمان در پایتون آشنا شوید، میتوانید به جدول نمادهای زمان پایتون در این لینک مراجعه نمایید.
اگر بخواهیم عکس عمل قبلی را انجام دهیم، از تابع strptime()
استفاده خواهیم کرد. این تابع دو ورودی از ما میگیرد.
1 2 3 4 5 6 7 8 | time_string = "13 Sep 2019" result = time.strptime( time_string, "%d %b %Y" ) print(result) # time.struct_time( tm_year=2019, tm_mon=9, tm_mday=13, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=256, tm_isdst=-1 ) |
اگر ساعت در مقدار وارد شده مشخص نباشد، صفر در نظر گرفته میشوند.
گاهی اوقات در توسعه برنامهها نیاز داریم برنامه را برای مدتی مشخص متوقف کنیم. برای مثال یک کار حتماً میبایست 45 ثانیه بعد از اتمام فعالیتی دیگر، انجام شود.
یا در برنامه نویسی خزنده های وب (Web Crawler) برای جلوگیری از مسدود شدن فعالیت ربات، بهتر است وقفه هایی به صورت تصادفی به خزنده داده شود.
برای وقفه دادن به برنامه ی در حال اجرا، از تابع sleep()
در ماژول time استفاده میکنیم.
ورودی این تابع یک عدد است که مقدار ثانیه وقفه اجرا را مشخص میکند.
time.sleep( 45 ) |
برای اینکه مقدار تاخیر (وقفه) اجرای برنامه به صورت تصادفی تعریف شود، میتوان به آسانی از یک مقدار Random استفاده کرد.
قطعه کد زیر در هر بار اجرای حلقه تکرارگر، به صورت تصادفی از 1 تا 2 دقیقه استراحت میکند.
1 2 3 4 5 6 | import time import random while True: # do something here time.sleep( random.randint( 60, 120 ) ) |
تا این جای کار با انواع توابعی که برای کار با زمان در پایتون استفاده بیشتری دارند را بررسی کردیم. اما ممکن است برای ذخیره سازی زمان مقداری سر در گم شده باشیم!
روش های زیادی برای ذخیره سازی زمان وجود دارد. دو راهکار ساده و متداول آنرا به مختصر بررسی میکنیم.
در این حالت تمام مقادیر زمانی ما به صورت یک عدد که مشخص کننده ثانیه سپری شده از مبدأ است را ذخیره میکنیم. هرگاه نیاز بود، میتوان آنرا با روش های گفته شده به رشته (string) قابل خواندن تبدیل کرد.
مزیت این روش مقایسه بسیار راحت زمان ها با یکدیگر است! برای مقایسه کوچکتر یا بزرگتری دو زمان، کافی است آن دو عدد را با هم مقایسه کنیم!
در این حالت، در اصل فرمت قابل خواندن توسط انسان را در پایگاه داده خود ذخیره میکنیم.
این راه حل بررسی جداول داده را راحتتر خواهد کرد. همچنین برای برنامه هایی که نیاز به نمایش زمان های مختلف ذخیره شده داریم، بهینه تر خواهد بود.
در این مقاله به بررسی کتابخانه time در زبان برنامه نویسی پایتون پرداختیم.
با استفاده از توابع مختلف آن، زمان فعلی سیستم را گرفتیم. همچنین زمان های مختلف را به یکدیگر تبدیل کردیم.
در ابتدا با کاربرد تابع time()
آشنا شدیم که زمان فعلی سیستم را به صورت ثانیه های سپری شده خروجی میداد. سپس این مقدار را به کمک تابع strftime()
به فرمت قابل خواندن تبدیل کردیم.
در ادامه با تابع sleep()
در اجرای برنامه خود وقفه ایجاد کردیم. در انتها نیز به بررسی روش های ذخیره زمان در برنامه نویسی پرداختیم.
شما چه تکنیک هایی برای کار با زمان در پایتون استفاده میکنید؟ لطفا آنرا از طریق دیدگاه ها با دیگران به اشتراک بگذارید!
سون لرن • آموزش...برچسب : نویسنده : استخدام کار 7learn بازدید : 634