شنبه ۲۹ دي ۱۴۰۳
Tut24 آموزش برنامه نویسی و مجله تخصصی فناوری ورود/عضویت

آموزش پایتون - تاریخ و زمان

یک برنامه پایتون می‌تواند به چندین روش با تاریخ و زمان کار کند. تبدیل بین فرمت‌های تاریخی یک کار معمول در برنامه های رایانه‌ای است. ماژول‌های زمان و تقویم جهت انجام موارد مرتبط با تاریخ و زمان استفاده می شوند

مفهوم تیک (Tick)

مفهوم "تیک" در پایتون به معنای ثانیه‌ها یا واحدهای زمانی است که برای اندازه‌گیری مدت زمان یا تعداد دورهای مختلف در برنامه‌نویسی استفاده می‌شود. این واحد زمانی به عنوان یک شمارنده‌ در نظر گرفته می شود

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

در بیانی اختصاصی تر ، تیک‌ها به تعداد ثانیه‌های گذشته از ساعت 00:00:00 روز 1 ژانویه 1970 تا به لحظه حال اشاره می کنند.

یک ماژول پرطرفدار به نام time در پایتون وجود دارد که توابعی را برای کار با زمان و تبدیل بین آن‌ها فراهم می‌کند. تابع time.time() زمان سیستم فعلی را در قالب تیک‌ها بازگردانی می کند

مثال

import time;  # این برای استفاده از ماژول زمان لازم است.

ticks = time.time()
print "Number of ticks since 12:00am, January 1, 1970:", ticks

این کد نتیجه‌ای شبیه به این تولید می‌کند :

Number of ticks since 12:00am, January 1, 1970: 7186862.73399

محاسبه تاریخ با استفاده از تیک‌ها بسیار آسان است. با این حال، تاریخ‌های قبل از یک ژانویه 1970 نمی‌توانند به این شکل نمایش داده شوند. همچنین، تاریخ‌هایی در آینده خیلی دور نیز نمی‌توانند به این شکل نمایش داده شوند - محدوده مناسب استفاده از تیک‌ها برای UNIX و ویندوز در زمانی در حدود سال 2038 است.

 TimeTuple:

توجه داشته باشید ، بسیاری از توابع زمانی پایتون، زمان را به صورت یک تاپل 9 عضوی (مانند زیر) مدیریت می‌کنند −

اندیس فیلد مقادیر
0 سال 4 رقمی 2008
1 ماه 1 تا 12
2 روز 1 تا 31
3 ساعت 0 تا 23
4 دقیقه 0 تا 59
5 ثانیه 0 تا 61 (60 یا 61 ثانیه‌های کبیسه)
6 روز هفته 0 تا 6 (0 یکشنبه)
7 روز سال 1 تا 366 (روز یولیان)
8 تغییرات روشنایی -1، 0، 1، -1 به معنای تعیین تغییرات روشنایی توسط کتابخانه است

توپل فوق معادل ساختار struct_time است. این ساختار دارای ویژگی‌های زیر است −

اندیس ویژگی‌ها مقادیر
0 tm_year 2008
1 tm_mon 1 تا 12
2 tm_mday 1 تا 31
3 tm_hour 0 تا 23
4 tm_min 0 تا 59
5 tm_sec 0 تا 61 (60 یا 61 ثانیه‌های کبیسه)
6 tm_wday 0 تا 6 (0 یکشنبه)
7 tm_yday 1 تا 366 (روز )
8 tm_isdst -1، 0، 1، -1 به معنای تعیین تغییرات روشنایی توسط کتابخانه است

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

برای تبدیل لحظه‌ی زمانی از مقدار اعشاری "تیک" به یک تاپل زمانی، مقدار اعشاری را به تابعی (مانند localtime) که تاپلی زمانی شامل تمام نه آیتم معتبر را برمی‌گرداند، ارسال کنید.

import time;

localtime = time.localtime(time.time())
print("Local current time :", localtime)

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

Local current time : time.struct_time(tm_year=2013, tm_mon=7, 
tm_mday=17, tm_hour=21, tm_min=26, tm_sec=3, tm_wday=2, tm_yday=198, tm_isdst=0)

دریافت زمان قالب‌بندی شده

شما می‌توانید زمان را بر اساس نیاز خود قالب‌بندی کنید، اما روش ساده‌ای برای دریافت زمان به صورت قالب بندی شده و قابل خواندن ، استفاده از asctime() است −

import time;

localtime = time.asctime( time.localtime(time.time()) )
print("Local current time :", localtime)

این عمل، نتیجه زیر را تولید خواهد کرد −

Local current time : Tue Jan 13 10:17:09 2009

دریافت تقویم برای یک ماه

ماژول تقویم (calendar) مجموعه‌ای وسیع از متدها را برای کار با تقویم سالانه و ماهانه ارائه می‌دهد. در اینجا، ما یک تقویم برای یک ماه مشخص (ژانویه 2024) را چاپ می‌کنیم −

import calendar

cal = calendar.month(2024, 1)
print("Here is the calendar:")
print(cal)

این عمل، نتیجه زیر را تولید خواهد کرد −

Here is the calendar:
    January 2024
Mo Tu We Th Fr Sa Su
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

ماژول time

در پایتون یک ماژول محبوب به نام time وجود دارد که توابعی را برای کار با زمان و تبدیل بین ساختارهای زمان مختلف ارائه می‌دهد. در ادامه لیستی از تمامی توابع موجود آمده است −

شماره تابع با توضیحات
1 time.altzone

نمایانگر اختلاف زمانی بین منطقه زمانی اصلی و منطقه زمانی دیگر

2 time.asctime([tupletime])

یک زمان-تاپل را دریافت کرده و یک رشته خوانا و 24 کاراکتری را برمی‌گرداند

3 time.clock( )

زمان فعلی CPU را به عنوان یک عدد اعشاری در ثانیه برمی‌گرداند. برای اندازه‌گیری هزینه محاسباتی رویکردهای مختلف، مقدار time.clock مفیدتر از time.time است

4 time.ctime([secs])

مانند asctime(localtime(secs)) است و بدون آرگومان مانند asctime( ) است.

5 time.gmtime([secs])

برای تبدیل زمان معین (به صورت ثانیه) به ساختار تاریخ و زمان UTC 

6 time.localtime([secs])

برای تبدیل زمان معین (به صورت ثانیه) به ساختار تاریخ و زمان محلی (زمان محلی سیستم) 

7 time.mktime(tupletime)

یک لحظه را که به صورت یک زمان-تاپل در زمان محلی اشاره دارد، دریافت کرده و یک مقدار اعشاری با لحظه به ثانیه برمی‌گرداند.

8 time.sleep(secs)

برای توقف اجرای برنامه به مدت زمان معین (به صورت ثانیه) استفاده می‌شود

9 time.strftime(fmt[,tupletime])

یک لحظه را که به صورت یک زمان-تاپل در زمان محلی اشاره دارد، دریافت کرده و یک رشته‌ای که لحظه مشخص شده توسط رشته fmt است را برمی‌گرداند.

10 time.strptime(str,fmt='%a %b %d %H:%M:%S %Y')

رشته str را بر اساس رشته قالب fmt تجزیه می‌کند و لحظه را به صورت زمان-تاپل برمی‌گرداند.

11 time.time( )

لحظه فعلی زمان را، به عنوان یک عدد اعشاری در ثانیه از تاریخ یک ژانویه 1970 برمی‌گرداند.

12 time.tzset()

قوانین تبدیل زمان استفاده شده توسط روتین‌های کتابخانه را بازنشانی می‌کند. متغیر محیطی TZ نحوه انجام این کار را مشخص می‌کند.

دو ویژگی مهم همراه با ماژول time موجود است −

شماره ویژگی با توضیحات
1

time.timezone

ویژگی time.timezone از ثانیه‌های اختلاف منطقه زمانی محلی (بدون DST) با UTC است (>0 در آمریکا؛ <=0 در بیشتر اروپا، آسیا و آفریقا).

2

time.tzname

ویژگی time.tzname یک جفت از رشته‌های وابسته به محلی است که نام‌های منطقه زمانی محلی بدون و با DST را به ترتیب نشان می‌دهد.

ماژول calendar

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

به طور پیش‌فرض، calendar فرض می‌کند روز دوشنبه به عنوان اولین روز هفته و روز یکشنبه به عنوان آخرین روز آن می‌باشد. برای تغییر این موضوع، تابع calendar.setfirstweekday() استفاده می شود.

اینجا لیستی از توابع موجود در ماژول calendar آورده شده است −

شماره تابع با توضیحات
1

calendar.calendar(year,w=2,l=1,c=6)

یک رشته چندخطی با تقویم سال year را با فرمت سه ستونی با c فاصله ایجاد می‌کند. عرض w کاراکتر برای هر تاریخ است؛ هر خط دارای طول 21*w+18+2*c است. l تعداد خطوط هر هفته است.

2

calendar.firstweekday( )

مقدار فعلی روز هفته که هر هفته با آن شروع می‌شود را برمی‌گرداند. به طور پیش‌فرض، وقتی که ماژول calendar اولین بار اجرا می‌شود، این مقدار 0 است که به معنای دوشنبه است.

3

calendar.isleap(year)

اگر سال year سال کبیسه باشد، True برگردانده می‌شود؛ در غیر این صورت، False.

4

calendar.leapdays(y1,y2)

تعداد کل روزهای کبیسه در سال‌های بین y1 و y2 را برمی‌گرداند.

5

calendar.month(year,month,w=2,l=1)

یک رشته چندخطی با تقویم ماه month سال year را ایجاد می‌کند، یک خط برای هر هفته به همراه دو خط سربرگ. عرض w کاراکتر برای هر تاریخ است؛ هر خط دارای طول 7*w+6 است. l تعداد خطوط هر هفته است.

6

calendar.monthcalendar(year,month)

یک لیست از لیستهای عددی برمی‌گرداند. هر زیرلیست هفته را نشان می‌دهد. روزهای خارج از ماه month سال year برابر 0 قرار دارند؛ روزهای درون ماه برابر با روز ماه خود، 1 و بالاتر هستند.

7

calendar.monthrange(year,month)

دو عدد برمی‌گرداند. اولین عدد کد روز هفته برای روز اول ماه month سال year است؛ دومین عدد تعداد روزهای ماه است. کدهای روز هفته از 0 (دوشنبه) تا 6 (یکشنبه)؛ شماره‌های ماه از 1 تا 12 هستند.

8

calendar.prcal(year,w=2,l=1,c=6)

مانند print calendar.calendar(year,w,l,c).

9

calendar.prmonth(year,month,w=2,l=1)

مانند print calendar.month(year,month,w,l).

10

calendar.setfirstweekday(weekday)

روز اول هر هفته را با کد روز هفته weekday تنظیم می‌کند. کدهای روز هفته از 0 (دوشنبه) تا 6 (یکشنبه) هستند.

11

calendar.timegm(tupletime)

برعکس time.gmtime: یک زمان به صورت تاپل زمانی را قبول کرده و همان زمان را به عنوان یک عدد اعشاری ثانیه (تیک) برمی‌گرداند.

12

calendar.weekday(year,month,day)

کد روز هفته را برای تاریخ داده شده برمی‌گرداند. کدهای روز هفته از 0 (دوشنبه) تا 6 (یکشنبه) هستند؛ شماره‌های ماه از 1 (ژانویه) تا 12 (دسامبر) هستند.

سایر ماژول‌ها و توابع

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