Table of Contents
کار با ماژول `datetime` در پایتون
در این بخش با ماژول datetime از کتابخانهٔ استاندارد پایتون آشنا میشوید؛ ماژولی که برای کار با تاریخ و زمان استفاده میشود: نمایش تاریخ امروز، کار با ساعت، محاسبهٔ اختلاف بین دو تاریخ، و قالببندی (فرمت) تاریخ و زمان.
وارد کردن ماژول `datetime`
برای استفاده از این ماژول، چند روش معمول برای import وجود دارد که کاربرد آنها کمی متفاوت است:
import datetime # روش کلی
from datetime import date, time, datetime, timedelta # وارد کردن کلاسهای خاص
در مثالها معمولاً از یکی از این دو الگو استفاده میکنیم. اگر از import datetime استفاده کنید، باید بنویسید datetime.date، datetime.datetime و غیره. اگر از from datetime import ... استفاده کنید، مستقیماً میتوانید date یا datetime را صدا بزنید.
کلاسهای مهم در `datetime`
چهار کلاس اصلی که در سطح مقدماتی بیشتر به آنها نیاز دارید:
date→ فقط تاریخ (سال، ماه، روز)time→ فقط زمان (ساعت، دقیقه، ثانیه، میکروثانیه)datetime→ ترکیب تاریخ و زمانtimedelta→ بازنمایی مدت زمان (مثلاً ۳ روز، ۲ ساعت)
در ادامه با هر کدام و چند کاربرد مهم آن آشنا میشویم.
کار با تاریخ (`date`)
ساختن یک شیء `date`
برای ساختن تاریخ مشخص:
from datetime import date
tarikh = date(2025, 3, 21) # سال، ماه، روز
print(tarikh) # 2025-03-21
سال، ماه و روز باید عدد صحیح (int) باشند.
تاریخ امروز
برای گرفتن تاریخ امروز (بر اساس ساعت سیستم):
from datetime import date
emroz = date.today()
print(emroz) # مثلاً: 2025-12-26
print(emroz.year) # سال
print(emroz.month) # ماه
print(emroz.day) # روز
ویژگیهای مهم شیء date:
yearmonthday
اطلاعات اضافی دربارهٔ تاریخ
برخی متدهای مفید:
weekday()
شمارهٔ روز هفته را برمیگرداند (دوشنبه = 0، سهشنبه = 1، …، یکشنبه = 6)
from datetime import date
emroz = date.today()
print(emroz.weekday()) # مثلاً 4 برای جمعه (بسته به تاریخ واقعی)isoformat()
تاریخ را به صورت رشتهای با قالب استاندارد ISO (مثلاً2025-12-26) برمیگرداند:
from datetime import date
emroz = date.today()
print(emroz.isoformat()) # '2025-12-26'کار با زمان (`time`)
کلاس time فقط زمان روز را نگه میدارد، بدون تاریخ.
from datetime import time
saat = time(14, 30, 0) # ساعت 14:30:00
print(saat) # 14:30:00
print(saat.hour) # 14
print(saat.minute) # 30
print(saat.second) # 0
آرگومانهای اصلی سازندهٔ time:
hour(ساعت، ۰ تا ۲۳)minute(دقیقه، ۰ تا ۵۹)second(ثانیه، ۰ تا ۵۹)microsecond(اختیاری، ۰ تا ۹۹۹۹۹۹)
ترکیب تاریخ و زمان (`datetime`)
کلاس datetime هم تاریخ را نگه میدارد، هم زمان را.
ساختن یک `datetime` مشخص
from datetime import datetime
dt = datetime(2025, 1, 1, 10, 15, 0) # سال، ماه، روز، ساعت، دقیقه، ثانیه
print(dt) # 2025-01-01 10:15:00
print(dt.year) # 2025
print(dt.month) # 1
print(dt.day) # 1
print(dt.hour) # 10
print(dt.minute) # 15تاریخ و زمان فعلی (`now` و `today`)
datetime.now()→ تاریخ و زمان فعلی (با توجه به سیستم)datetime.today()→ تقریباً مشابهnow()(در این سطح میتوانید آنها را یکی در نظر بگیرید)
from datetime import datetime
alan = datetime.now()
print(alan) # مثلاً: 2025-12-26 11:20:35.123456محاسبهٔ اختلاف بین تاریخها و زمانها (`timedelta`)
برای محاسبهٔ فاصلهٔ زمانی بین دو تاریخ یا دو datetime از timedelta استفاده میشود.
اختلاف دو تاریخ
from datetime import date
t1 = date(2025, 1, 1)
t2 = date(2025, 1, 10)
ekhtelaf = t2 - t1
print(ekhtelaf) # 9 days, 0:00:00
print(ekhtelaf.days) # 9
نتیجهٔ کم کردن دو date، یک شیء timedelta است. مهمترین ویژگی آن:
days→ تعداد روزهای اختلاف
جمع و تفریق `timedelta` با تاریخ
میتوانید یک مدت زمان (مثلاً ۷ روز) را به یک تاریخ اضافه کنید:
from datetime import date, timedelta
emroz = date.today()
yek_haft_e_digar = emroz + timedelta(days=7)
print("امروز:", emroz)
print("یک هفته دیگر:", yek_haft_e_digar)
همین کار با datetime هم ممکن است:
from datetime import datetime, timedelta
alan = datetime.now()
do_saat_digar = alan + timedelta(hours=2)
print(do_saat_digar)ساختن `timedelta`
رایجترین پارامترها:
dayssecondsmicrosecondsminuteshoursweeks
مثال:
from datetime import timedelta
moddat = timedelta(days=2, hours=3)
print(moddat) # 2 days, 3:00:00تبدیل رشته به تاریخ/زمان و برعکس
بسیار مهم است که بتوانید:
- یک
datetimeیاdateرا به رشته (string) تبدیل کنید (برای نمایش) - یک رشته را به
datetimeتبدیل کنید (مثلاً از ورودی کاربر یا فایل)
تبدیل `datetime` به رشته با `strftime`
متد strftime روی اشیاء date و datetime قابل استفاده است و با استفاده از «کدهای قالب» (format codes) یک رشته تولید میکند.
مثال:
from datetime import datetime
alan = datetime(2025, 12, 26, 14, 45)
matn = alan.strftime("%Y-%m-%d %H:%M")
print(matn) # '2025-12-26 14:45'چند کد پرکاربرد:
%Y→ سال چهاررقمی (مثلاً 2025)%y→ سال دورقمی (مثلاً 25)%m→ ماه دو رقمی (01 تا 12)%d→ روز ماه دو رقمی (01 تا 31)%H→ ساعت ۰–۲۳%M→ دقیقه ۰–۵۹%S→ ثانیه ۰–۵۹
مثالهای بیشتر:
from datetime import date
emroz = date(2025, 3, 21)
print(emroz.strftime("%d/%m/%Y")) # 21/03/2025
print(emroz.strftime("%Y.%m.%d")) # 2025.03.21تبدیل رشته به `datetime` با `strptime`
متد strptime یک رشته را طبق یک قالب مشخص به datetime تبدیل میکند.
شکل کلی:
datetime.strptime("رشته", "قالب")مثال:
from datetime import datetime
matn = "2025-03-21 14:30"
dt = datetime.strptime(matn, "%Y-%m-%d %H:%M")
print(dt) # 2025-03-21 14:30:00
print(type(dt)) # <class 'datetime.datetime'>اگر قالب با رشته جور نباشد، خطا رخ میدهد (ValueError). برای مثال:
from datetime import datetime
# رشته: روز/ماه/سال
matn = "21/03/2025"
dt = datetime.strptime(matn, "%d/%m/%Y")
print(dt) # 2025-03-21 00:00:00نکته: هنگام کار با تاریخهایی که کاربر وارد میکند، باید دقیقاً بنویسید قالب ورودی چیست.
کاربردهای ساده و روزمرهٔ `datetime`
مثال ۱: محاسبهٔ سن کاربر بر اساس سال تولد
from datetime import date
sal_tavalod = int(input("سال تولد خود را وارد کنید (مثلاً 2000): "))
emroz = date.today()
sen = emroz.year - sal_tavalod
print("سن تقریبی شما:", sen)(این محاسبه دقیق نیست چون ماه و روز را در نظر نمیگیرد، اما برای ایدهٔ کلی کافی است.)
مثال ۲: چند روز تا یک تاریخ خاص مانده است؟
from datetime import date
emroz = date.today()
eid = date(emroz.year, 3, 21) # فرضاً نوروز همان سال
if eid < emroz:
# اگر نوروز امسال گذشته، نوروز سال بعد را در نظر بگیر
eid = date(emroz.year + 1, 3, 21)
baghimande = eid - emroz
print("روزهای باقیمانده تا نوروز:", baghimande.days)مثال ۳: ثبت زمان اجرا (timestamp) در یک فایل متنی
ترکیب datetime با فایلها (فقط منطق مربوط به تاریخ):
from datetime import datetime
alan = datetime.now()
matn_zaman = alan.strftime("%Y-%m-%d %H:%M:%S")
print("این کار در زمان", matn_zaman, "انجام شد.")جمعبندی
نکات کلیدی ماژول datetime که در سطح مقدماتی مفید است:
dateبرای کار با تاریخ (سال، ماه، روز)timeبرای کار با زمان (ساعت، دقیقه، ثانیه)datetimeبرای ترکیب تاریخ و زمانtimedeltaبرای نمایش و محاسبهٔ فاصلهٔ زمانی- عملیات مهم:
date.today()،datetime.now()- جمع و تفریق با
timedelta - تبدیل به رشته با
strftime - تبدیل رشته به
datetimeباstrptime
در تمرینهایتان میتوانید از datetime برای افزودن زمان به خروجی برنامهها، محاسبهٔ روزهای باقیمانده تا یک رویداد، یا ثبت تاریخ و زمان انجام یک کار استفاده کنید.