در بسیاری از وظایف نرم افزاری نیاز به استفاده از تاریخ و زمان وجود داشته و این تاریخ و زمان اغلب هنگام ثبت داده ها مورد استفاده قرار میگیرد. همچنین هنگام کار با تاریخ و زمان معمولا سنجش اختلاف تاریخها و زمانهای مختلف ضروری خواهد بود. در این نوشته امکانات زبان برنامه نویسی پایتون برای کار با تاریخ و زمان معرفی خواهد گردید.
بسم الله الرحمن الرحیم
عمومیتده وئریلری ایکی صنفه آییرماق ممکن دور؛ بیرینجی صنف، الده ائدیلدیگی زمانی اهمیتلی اولان وئریلر؛ ایکینجی ایسه زمانلاری اهمیتسیز اولان وئریلر. بیرینجی صنف وئریلرله ایشلرکن تاریخ و زمان ایله علاقهلی مختلف وظیفهلرله اوزلشهجگیک، بونا گؤره ده ایشلتدیگیمیز یازیلیملاما دیلینده تاریخ و زمان اوچون حاضیرلانان امکانلاری تانیمالیییق. بو یازیدا پایتون دیلینده تاریخ و زمان ایله ایشلهمک اوچون اساس امکانلار تانیدیلاجاقلار. سؤزو سورولن وظیفهلر اوچون مختلف کیتابخانالار ایشلنهبیلرلر، بلکه ده تاریخ و زمان اوچون رسمی اولمایاراق گلیشدیریلمیش کیتابخانالار سایسیز اولالار. لکن بو یازیدا سؤزوموزون قونوسو ایکی time و datetime کیتابخانالاری دیرلار.
بیرینجی آچیقلاناجاق کیتابخانا time دیر. بو کیتابخانادا تاریخ و زمان اوچون حاضیرلانان تابعلر ۱۹۷۰-جی ایلین ژانویه آیینین بیرینجی گونو ساعات صفردن ایندییه دک گئچمیش ثانیهلر اساسدا چالیشارلار. بو کیتابخانانین ان مهم تابعی time تابعی دیر. بو تابع دئییلن زماندان ایندییه دک اؤتموش ثانیهلری اعشاری عدد شکلینده قایتارار. مثال اولاراق:
import time ticks = time.time() print("Number of ticks since 12:00am, January 1, 1970:", ticks)
بو کیتابخانانین باشقا تابعلری عمومیتده تانیتدیغیمیز time تابعینه باغلی اولوب، بو تابعین چاغیریلیش سونوچونو مشخص بیر قالبه سالارلار. ایندیکی تاریخ و زمانی الده ائتمک اوچون time کیتابخاناسیندان localtime تابعینی چاغیرابیلریک. بو تابع سؤیلهدیگیمیز زماندان، یعنی ۱۹۷۰-جی ایلین ژانویه آیینین بیرینجی گونو ساعات صفردن، گئچمیش ثانیهلری آلیب، دوققوز قسمده اولان و تاریخ ایله زمانی گؤسترن بیر نتیجه قایتاراجاق دیر. آشاغیداکی میثال بو تابعین نئجه ایشلنمهسینی و نتیجهسینی داها آیدینلاداجاق دیر:
import time localtime = time.localtime(time.time()) print("Local current time :", localtime)
بو میثالین نتیجهسی بونا اوخشار بیر یازی اولاجاق دیر:
Local current time : time.struct_time(tm_year=2021, tm_mon=10, tm_mday=4, tm_hour=11, tm_min=42, tm_sec=28, tm_wday=0, tm_yday=277, tm_isdst=0)
گؤردوگونوز کیمی localtime تابعی باشلانغیچ زماندان گئچن ثانیهلر اساسدا تاریخ و زمانی بیزه دوققوز فیلد واسطهسییله قایتارمیش دیر. بو دوققوز فیلد بئیله دیرلر:
۱. ایل (دؤرد رقمده): tm_year
۲. آی (بیردن اون ایکییهجه): tm_mon
۳. گون (بیردن اوتوز بیرهجه): tm_mday
۴. ساعات (صفردن ایگیرمی اوچهجه): tm_hour
۵. دقیقه (صفردن اللی دوققوزاجا): tm_min
۶. ثانیه (صفردن آلتمیش بیرهجه!): tm_sec
۷. هفتهنین گونو (دوشنبهدن صفر گؤسترگهسی ایله باشلاییب، یکشنبهده آلتییاجا): tm_wday
۸. ایلین گونو (بیردن اوچ یوز آلتمیش آلتییاجا): tm_yday
۹. ساعاتلارین گونون ایشیغیندان داها یاخشی فایدالانماق اوچون تغییری (صفر، ۱ و -۱): tm_isdst
بو فیلدلرین مقدارینی الده ائتمک اوچون گؤسترگهلردن ده، سونوچلانان شی فیلدلریندن ده یارارلانماق ممکن دور. میثال اولاراق:
import time localtime = time.localtime(time.time()) print("Day of year:", localtime.tm_yday) print("Day of week:", localtime[6])
یئنه بو کیتابخانادان باشقا بیر یارارلی تابع asctime دیر. بو تابع واسطهسییله تاریخ و زمانی استاندارد بیر قالبده الده ائدهبیلرسینیز. بو تابعین بیرجه گیریشی تانیدیغینیز localtime تابعینین سونوچو دور. آشاغیداکی میثال بو تابعین نئجه ایشلنمهسینی آچیقلامیش دیر:
import time localtime = time.asctime(time.localtime(time.time())) print("Local current time :", localtime)
بو میثالین نتیجهسی بئیله اولاجاق دیر:
Local current time : Tue Oct 05 10:17:09 2021
البته بیلمهلیییک بو ایکی تابع گیریشسیز ده چالیشابیلرلر. بو تابعلر گیریشسیز چاغیریلسالار گئنه ایندیکی تاریخ و زمانی قایتارارلار. داها دوغروسو time کیتابخاناسینین time تابعینین نتیجهسینی بو تابعلرین پارامتری اولاراق ایشلتمک، باشقا زمانلارین تاریخینی الده ائتمگی راحاتلاتماق اوچون دور. مثلا دؤرد گون آلتی ساعات ایگیرمی بئش دقیقه اؤنجهنین تاریخینی الده ائتمک اوچون بئیله یازابیلرسینیز:
import time localtime = time.localtime(time.time() - (4 * 24 * 60 * 60 + 6 * 60 * 60 + 25 * 60)) print(localtime)
بونلارا علاوه، بیر یازیلیمین اجراسینا گرک اولان زمانی اؤلچمک اوچون time تابعیندن یارارلانابیلرسینیز. بونون اوچون یازیلیم باشلامادان و قورتولاندان سونرا time تابعینی چاغیریب مقدارینی ساخلامالیسینیز. بو ایکی مقداری بیر بیریندن چیخسانیز یازیلیمین اجراسی اوچون گرک اولان زمانی الده ائدهبیلرسینیز. میثال اولاراق:
from time import time t0 = time() sum = 0 for i in range(1, 1000001): sum += i t1 = time() print("Elapsed time:", t1 - t0)
time کیتابخاناسینین باشقا تابعلری بو قراردا دیرلار:
۱. ctime: بو تابع تانیدیلان asctime تابعی کیمی دیر لکن چاغیریلاندا هئچ بیر پارامتر گرک دییل دیر.
۲. sleep: یازیلیمین اجراسینی دیلهدیگیمیزجه تعویقه سالان بو تابعین بیرجه گیریشی وار دیر، ثانیه اساسدا تعویق اوچون نظرده آلینان زمان.
۳. gmtime: عموم دونیا استاندارد زمانی حسابلایان تابع دیر.
۴. mktime: بو تابع سؤیلهدیگیمیز باشلانغیچ زماندان (۱۹۷۰-جی میلادی ایلین ژانویه آیینین بیرینجی گونو ساعات صفر) وئریلن زماناجا اؤتن ثانیهلری اعشاری بیر عدد شکلینده قایتارار. بو تابع چاغیریلیرکن بیر پارامتر دیلهییر. بو پارامتر تاندیتدیغینیز دوققوز فیلدلی زمان قالبینده اولمالی دیر.
۵. strptime: زمانی یازی اولاراق استاندارد شکلده آلیب، دوققوز فیلدلی زمان فرمتینده قایتارار. یازیدان علاوه استاندارد قالبی ده تابعین ایکینجی گیریشی اولاراق بلیرتمک ممکن دور.
۶. strftime: زمانی دوققوز فیلدلی قالبده آلیب، اونو یازی شکلینده قایتارار. قایتاریلاجاق یازینین فرمتینی تابعین ایکینجی گیریشییله بلیرتمک ممکن دور.
تانییاجاغیمیز ایکینجی کیتابخانا datetime کیتابخاناسی دیر. بو کیتابخانا بیر نئچه کلاسی زمانلا چالیشماق اوچون حاضیرلامیش دیر. بو کلاسلار بو قراردا دیرلار:
۱. date: تاریخی گریگوریان تقویمی اساسدا ساخلاماق اوچون ایشلنهبیلر. بو کلاسین فیلدلری گون، آی و ایل دیر.
۲. time: زمانی ساخلاماق اوچون ایشلنن کلاس دیر. بو کلاسین فیلدلری ساعات، دقیقه، ثانیه، میکروثانیه و زمان منطقهسی دیر.
۳. datetime: اؤنجهکی ایکی کلاسلارین وئردیگی امکانلاری بو کلاس بیر آرایا ییغمیش. فیلدلری ایسه اونلارین فیلدلرینین توپلانتیسی دیر.
۴. timedelta: ایکی date یا time یا datetime شیی آراسیندا اختلافی میکروثانیه دقتینده گؤسترن کلاس دیر.
۵. tzinfo: زمان منطقهسینی گؤسترمک اوچون بیر کلاس دیر. time و datetime کلاسلارییله بیرگه ایشلنیلر.
۶. timezone: بو کلاس tzinfo کلاسینی عموم دونیا استاندارد زماندان ثابت بیر زمان آفستی ایله گؤسترمک اوچون دور.
datetime کیتابخاناسینی باشقا کیتابخانالاردان آییران اؤزللیکلر تاریخ و زمانی بیر بیریندن چیخماق، بیر بیرینه آرتیرماق و مقایسه ائتمک امکانی دیر. میثاللار واسطهسییله بو کیتابخانانین نئجه ایشلنمهسینی داها راحات اؤیرهنهبیلرسینیز. بیرینجی میثالدا ایندیکی تاریخ و زمانی گؤسترهجگیک:
from datetime import datetime now = datetime.now() print(now) print(now.year, now.month, now.day)
گؤردوگونوز کیمی ایندیکی تاریخ و زمانی الده ائتمک اوچون datetime کیتابخاناسینین datetime کلاسینین now تابعینی ایشلدهبیلرسینیز. بو تابعین چیخیشی datetime کلاسی نوعوندان دیر. ایندی timedelta کلاسینی داها درین تانیییب اونو ایشلتمگی اؤیرهنهجگیک. timedelta کلاسینین یاپیچی تابعی یئتدی صفر مقدارلی گیریشی وار دیر؛ یعنی هانسی گیریشینی بیز مقدارلامازساق صفر نظرده آلیناجاق دیر. بو یئتدی پارامتر بو قراردا دیرلار:
۱. days: گونلر سایی
۲. seconds: ثانیهلر سایی
۳. microseconds: میکروثانیهلر سایی
۴. milliseconds: میلیثانیهلر سایی
۵. minutes: دقیقهلر سایی
۶. hours: ساعاتلار سایی
۷. weeks: هفتهلر سایی
بو نوعدان اولان بیر شی یارادیلاندان سونرا datetime ایله توپلانیب یا اوندان چیخیلابیلر. آشاغیداکی میثال بو امکانلارین ایشلنمهسینی گؤسترهجک دیر:
from datetime import datetime, timedelta now = datetime.now() delta = timedelta(hours=2, minutes=15, seconds=20) print("Now:", now) print("Time delta:", delta) print("Now - Time delta:", now - delta) print("Now + Time delta:", now + delta) print("2 x Time delta:", 2 * delta) print("Time delta / 2:", delta / 2)
بو مثالین سونوچو بئیله اولاجاق دیر:
Now: 2021-10-09 19:55:48.060706 Time delta: 2:15:20 Now - Time delta: 2021-10-09 17:40:28.060706 Now + Time delta: 2021-10-09 22:11:08.060706 ۲ x Time delta: 4:30:40 Time delta / 2: 1:07:40
بو کیتابخانانین سوندوغو باشقا قابلیت زمانلارین مقایسهسی دیر. یئنه بیر میثال واسطهسییله بو امکانی تانییاجاغیق:
from datetime import datetime, timedelta from random import randint now = datetime.now() delta1 = timedelta(hours=randint(0, 24), minutes=randint(0, 60)) delta2 = timedelta(hours=randint(0, 24), minutes=randint(0, 60)) time1 = now - delta1 time2 = now - delta2 if time1 > time2: print("Time 1 > Time 2!") else: print("Time 1 < Time 2!") if delta1 < delta2: print("Time delta 1 < Time delta 2!") else: print("Time delta 1 > Time delta 2!")
بو یازیدا محدود اولاراق time و datetime کیتابخانالارینی تانیییب، اونلارین ایلکین امکانلارینی ایشلتمگی اؤیرهندیک. بو کیتابخانالارا گؤره داها آرتیق بیلگیلری آشاغیداکی لینکلرده اوخویابیلرسینیز:
https://docs.python.org/3/library/time.html
https://docs.python.org/3/library/datetime.html