یکی از مهمترین مزایای زبان برنامهنویسی پایتون، وجود داشتن کتابخانههای (ماژولها) غنی و کاربردی در این زبان است. پایتون از معدود زبانهای برنامهنویسی است که در هر زمینهی کاری، کتابخانهای مفید برای آن وجود دارد. یادگیری کتابخانههای مختلف پایتون، کمک شایان توجهای در پیشرفت برنامهنویسی شما خواهد داشت. در این مقاله قصد داریم کار با کتابخانه datetime در پایتون را با چند برنامهی مختلف، به شما آموزش دهیم. کتابخانهی datetime یکی از کتابخانههای مهم پایتون، است. اگر علاقهمند به این موضوعات هستید، در ادامه با ما همراه باشید.
برای اولین برنامه یک مثال ساده میآوریم و برنامهای مینویسیم که تاریخ اکنون را به صورت مقادیر جداگانه سال، ماه، روز، ساعت، دقیقه و ثانیه دریافت کند و در پایان با سلیقهی خود چاپ میکنیم.
برای شروع کار با کتابخانه datetime در پایتون برای این برنامه و سایر برنامههایی که خواهیم نوشت، ابتدا باید با دستور import کتابخانهی datetime را در ابتدای برنامهها وارد کنیم. به این صورت:
import datetime
در ادامه باید تاریخ اکنون را به دست آوریم. برای این منظور از تابع today() در کلاس datetime استفاده میکنیم. به این صورت:
import datetime
now = datetime.datetime.today()
...
حالا با استفاده از متغیر now تمامی محتویات آن را به صورت زیر، جداگانه دریافت میکنیم:
...
now = datetime.datetime.today()
mm = str(now.month)
dd = str(now.day)
yyyy = str(now.year)
hour = str(now.hour)
mi = str(now.minute)
ss = str(now.second)
...
هر کدام از متغیرهای بالا، به ترتیب معرف سال، ماه، روز، ساعت، دقیقه و ثانیه میشود. در انتها نیز با استفاده از دستور print خروجی مورد نظر خود را به چاپ میرسانیم.
print (mm + "/" + dd + "/" + yyyy + " " + hour + ":" + mi + ":" + ss)
برنامه کامل و یک جای ما به همراه خروجی آن، به صورت زیر است:
import datetime
now = datetime.datetime.today()
mm = str(now.month)
dd = str(now.day)
yyyy = str(now.year)
hour = str(now.hour)
mi = str(now.minute)
ss = str(now.second)
print (mm + "/" + dd + "/" + yyyy + " " + hour + ":" + mi + ":" + ss)
در ادامهی این مقاله خواهیم دید، چگونه با نوشتن یک خط کد، میتوانیم خروجی مورد نظر خود را برای قالب تاریخ داشته باشیم.
اولین برنامهی ما، برنامهای خواهد بود که سن کاربر را از ورودی دریافت کرده و سال تولد او را به میلادی چاپ میکند.
کتابخانهی datetime را در ابتدا وارد میکنیم.
import datetime
برای پیدا کردن سال تولد کاربر از روی سن او، باید سن را از سالی که در آن هستیم، کم کرده، تا سال تولد را به دست آوریم. در کتابخانهی datetime، با استفاده از تابع now() در کلاس datetime آن، میتوانیم تاریخ و ساعتی که در آن هستیم را بگیریم. پس در اینجا تاریخ و ساعت را در یک متغیر ذخیره میکنیم. اینگونه:
import datetime
now = datetime.datetime.now()
...
اگر اکنون متغیر now را با دستور پرینت اجرا کنیم، خروجی ما به صورت زیر است:
2020-06-15 22:59:03.274304
ما به این تاریخ و ساعت کامل نیاز نداریم و فقط سال مورد نظر را باید داشته باشیم. برای این کار میتوانیم با استفاده از صفت (attribute) year فقط سال را دریافت کنیم. پس در ادامهی نوشتن برنامه، سن را از کاربر دریافت میکنیم. به این صورت:
import datetime
now = datetime.datetime.now()
age = float(input('What is your age? '))
...
اکنون فقط کافی است سالی که در آن هستیم را از سن کم کنیم تا سال تولد به دست آید. همانطور که گفتیم برای داشتن سال، از صفت year استفاده میکنیم. به این صورت:
...
year_born = int(now.year - age)
...
در آخر برای چاپ جواب، باید متغیر year_born را با استفاده از تابع print() در خروجی چاپ کنیم. به این شکل:
...
year_born = int(now.year - age)
print ("Awesome! you were born in ", year_born)
کد کامل ما به صورت زیر است. اگر سن ورودی را 25 وارد کنیم، خروجی کد را در ادامه مشاهده کنید.
import datetime
now = datetime.datetime.now()
age = float(input('What is your age? '))
year_born = int(now.year - age)
print ("Awesome! you were born in ", year_born)
What is your age? 25
Awesome! you were born in 1995
برای برنامهی سوم برنامهای خواهیم نوشت که تاریخ روز را به شکلی که دوست داریم، به نمایش میگذارد.
برای این برنامه نیز، کتابخانهی datetime را در ابتدای کد وارد میکنیم. میتوانیم با استفاده از دستور as نام کتابخانه را به شکل دلخواه خود در بیاوریم. به این صورت:
import datetime as dt
...
این بار با استفاده از تابع today() در کلاس date تاریخ روز را دریافت میکنیم.
import datetime as dt
today_date = dt.date.today()
...
اگر اکنون متغیر today_date را چاپ کنیم ، خروجی ما به صورت زیر است:
همانطور که در برنامه اول وعده دادیم نوبت آن است که قالب دلخواه خروجی خود را بدون کد اضافه بنویسیم. برای این منظور که تاریخ را به شکل مورد نظر خود با یک خط کد، چاپ کنیم، از تابع strftime() کمک میگیریم. به این صورت:
print(today_date.strftime("The Current Date is :\n\n%A %B %d, %Y"))
برای آشنایی بیشتر با سایر قالببندیهای تابع strftime، مقالهی Python’s strftime directives را مشاهده کنید.
میتوانید در زیر برنامهی کامل شده و نیز خروجی آن را مشاهده کنید.
import datetime as dt
today_date = dt.date.today()
print(today_date.strftime("The Current Date is :\n\n%A %B %d, %Y"))
میخواهیم برنامهای بنویسیم که از تاریخ که شامل سال و ماه و روز میشود، جستجو کند و تاریخهایی که به صورت Palindrome است را برای ما پیدا کرده و چاپ کند. به عنوان مثال: 11.02.2011
این بار نیز کتابخانهی datetime را با روشی دیگر که تمام کلاسها در آن import میشوند وارد میکنیم. به صورت زیر:
from datetime import *
در ادامه ما از تاریخ 01.01.1900 تا 31.12.2020 را جستجو میکنیم. پس به این صورت مقادیر را وارد میکنیم:
from datetime import *
start = "01.01.1900"
end = "31.12.2020"
...
همانگونه که مشاهده میکنید، تاریخی که ما نوشتیم یک رشته محسوب شده و باید به قالب تاریخ در آوریم. برای این منظور از تابع strptime() در کلاس datetime استفاده میکنیم. به این صورت:
...
start = "01.01.1900"
end = "31.12.2020"
startd = datetime.strptime(start, "%d.%m.%Y")
endd = datetime.strptime(end, "%d.%m.%Y")
...
اکنون وقت آن است با یک حلقهی تکرار for محدودهی تاریخی مورد نظر را پیمایش کرده و Palindrome تاریخها را پیدا کنیم. اما قبل از حلقهی تکرار میتوانیم یک جمله چاپ کنیم که نشان دهد، خروجی ما چیست. محدودهی حلقهی ما از صفر تا مدت روزهای بین دو تاریخ است. به این صورت:
...
startd = datetime.strptime(start, "%d.%m.%Y")
endd = datetime.strptime(end, "%d.%m.%Y")
print("Palindrome dates:")
for i in range((endd-startd).days):
...
در داخل حلقه، با استفاده از تابع timedelta یک روز به تاریخ شروع خود اضافه میکنیم. به صورت زیر:
...
print("Palindrome dates:")
for i in range((endd-startd).days):
startd += timedelta(days = 1)
...
اگر بخواهیم تاریخ را با برعکس خودش مقایسه کنیم، باید به صورتی باشد که هیچ علامت و فاصلهای نداشته باشد. برای این منظور از تابع strftime() استفاده میکنیم. به این صورت:
...
print("Palindrome dates:")
for i in range((endd-startd).days):
startd += timedelta(days = 1)
dstr = datetime.strftime(startd, "%d%m%Y")
...
حال برای به دست آوردن خواستهی برنامه، باید با یک if تاریخ را با برعکس خودش مقایسه کرده و اگر شرط برقرار بود، آن را چاپ کند. به این صورت:
...
dstr = datetime.strftime(startd, "%d%m%Y")
if dstr == dstr[::-1]:
print(dstr[:2] + "." + dstr[2:4] + "." + dstr[4:])
...
برنامهی مورد نظر ما نوشته شد. کد کامل و یک جای برنامه و همچنین خروجی برنامه را میتوانید در زیر ببینید:
from datetime import *
start = "01.01.1900"
end = "31.12.2020"
startd = datetime.strptime(start, "%d.%m.%Y")
endd = datetime.strptime(end, "%d.%m.%Y")
print("Palindrome dates:")
for i in range((endd-startd).days):
startd += timedelta(days = 1)
dstr = datetime.strftime(startd, "%d%m%Y")
if dstr == dstr[::-1]:
print(dstr[:2] + "." + dstr[2:4] + "." + dstr[4:])
Palindrome dates:
10.02.2001
20.02.2002
01.02.2010
11.02.2011
21.02.2012
02.02.2020
قصد داریم برنامهای بنویسیم که تاریخی را از ورودی دریافت کند و تعداد روزهای زندگی یک فرد تا آن تاریخ، را مشخص و در خروجی چاپ کند. اگر فرد تا آن تاریخ به دنیا نیامده باشد، پیغام مناسبی چاپ کند.
در این برنامه ما یک تاریخ به عنوان سال تولد یک فرد داریم (به عنوان مثال: 24/06/1994) در ادامه باید تاریخی به میلادی از ورودی دریافت کنیم تا اگر او تا این تاریخ به دنیا آمده باشد، تعداد روزهای زندگی او تا آن تاریخ را چاپ کند. در غیر این صورت پیغام “در این تاریخ هنوز متولد نشدهاید” را چاپ کنیم.
طبق برنامههای قبلی، کتابخانهی datetime را import میکنیم.
import datetime as dt
در ادامه تاریخ تولد را در متغیری ذخیره میکنیم و سپس با دستور input تاریخ مد نظر کاربر را دریافت میکنیم. برای آن که قالبی استاندارد برای دریافت تاریخ داشته باشیم، قالب تاریخ ورودی را برای کاربران به صورت مثال میآوریم. به صورت زیر:
import datetime as dt
year_born = dt.date(1982,2,14)
input_year = input('Enter your Date:(e.g. 1990.05.11) ')
...
حال برای آن که تاریخ ورودی را از رشته تبدیل به فرمت تاریخ کنیم همانند برنامه قبل از تابع strptime() استفاده میکنیم. توجه داشته باشید به مانند قالبی که رشته تاریخ را دریافت میکنید، ترتیب سال و ماه و روز را در تابع strptime مشخص کنید. به این صورت:
...
input_year = input('Enter your Date:(e.g. 1990.05.11) ')
syear = dt.datetime.strptime(input_year, "%Y.%m.%d")
...
اکنون باید تاریخ داده شده را از تاریخ تولد کم کنیم و حاصل را در متغیری ذخیره کنیم. به دلیل اینکه تابع strptime() تاریخ و زمان را خروجی میدهد، ما با کمک تابع date فقط تاریخ را فیلتر میکنیم. با کمک صفت days خروجی ما، فقط مقدار روزها را نمایش میدهد.
...
year_born = dt.date(1982,2,14)
input_year = input('Enter your Date:(e.g. 1990.05.11) ')
syear = dt.datetime.strptime(input_year, "%Y.%m.%d")
days_life = (syear.date()- year_born).days
...
در انتها ما با یک شرط if-else متغیر days_life را بررسی کرده و اگر مقدار آن کوچکتر مساوی صفر باشد، پیغام “در این تاریخ هنوز متولد نشدهاید” را به او میدهیم و در غیر این صورت مقدار روزهای به دست آمده را چاپ میکنیم. به این شکل:
...
days_life = (syear.date()- year_born).days
if days_life <= 0:
print('You were not born on this date.')
else:
print('It\'s been {} days from your date of birth to input date'.format(days_life))
این برنامه نیز کامل شد و شما میتوانید کد یک جا و کامل آن را در زیر مشاهده کنید. خروجی برنامه را نیز در صورتی که تاریخ ورودی صحیح باشد، در ادامه ببینید.
import datetime as dt
year_born = dt.date(1982,2,14)
input_year = input('Enter your Date:(e.g. 1990.05.11) ')
syear = dt.datetime.strptime(input_year, "%Y.%m.%d")
days_life = (syear.date()- year_born).days
if days_life <= 0:
print('You were not born on this date.')
else:
print('It\'s been {} days from your date of birth to input date'.format(days_life))
Enter your Date (e.g. 1990.05.11): 2020.06.16
It’s been 14002 days from your date of birth to input date
جمعبندی:
سعی کردیم با چند برنامهی کوتاه و مختصر، کار با کتابخانه datetime در پایتون را به شما آموزش دهیم. این تنها بخش کوچکی از تواناییهای این کتابخانه، به شمار میآید و شما میتوانید برای تمرین و یادگیری بیشتر، با سایر کلاسها و توابع مهم این کتابخانه کار کنید. کتابخانهها در پایتون، جذابترین و کاربردیترین امکانی است که پایتون و سایر برنامهنویسان به صورت عمومی در اختیار همگان قرار دادهاند تا از کارهای تکراری پرهیز شود. یک برنامهنویس حرفهای، بیشترین پیشرفت خود را مدیون آشنایی و شناخت انواع کتابخانهها است. پس شما نیز، برای موفقیت در برنامهنویسی، کتابخانههای مهم پایتون را بشناسید. امیدواریم مطالب نوشته شده برای شما مفید واقع شود. اگر در این مورد سوال یا نظری داشتید خوشحال میشویم که با ما و کاربران سون لرن به اشتراک بگذارید.
اگر به یادگیری بیشتر در زمینهی برنامه نویسی پایتون علاقه داری، یادگیری زبان پایتون بسیار ساده است. و با شرکت در دورهی آموزش پایتون توسعه وب در آینده میتونی اپلیکیشن موبایل و دسکتاپ بسازی و وارد حوزهی هوش مصنوعی هم شوی.
print(dstr[:2] + "." + dstr[2:4] + "." + dstr[4:])
زمان رو در شروع کار بگیرید و در یک متغیر بریزید. بعد از اون هر زمان خواستید میتونید اون متغیر رو چاپ کنید تا تایم ثبت شده رو بهتون بده.