Kahibaro
Discord Login Register

datetime

کار با ماژول `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`)

ساختن یک شیء `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:

اطلاعات اضافی دربارهٔ تاریخ

برخی متدهای مفید:

from datetime import date
emroz = date.today()
print(emroz.weekday())   # مثلاً 4 برای جمعه (بسته به تاریخ واقعی)
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:

ترکیب تاریخ و زمان (`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`)

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 است. مهم‌ترین ویژگی آن:

جمع و تفریق `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`

رایج‌ترین پارامترها:

مثال:

from datetime import timedelta
moddat = timedelta(days=2, hours=3)
print(moddat)   # 2 days, 3:00:00

تبدیل رشته به تاریخ/زمان و برعکس

بسیار مهم است که بتوانید:

  1. یک datetime یا date را به رشته (string) تبدیل کنید (برای نمایش)
  2. یک رشته را به 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'

چند کد پرکاربرد:

مثال‌های بیشتر:

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 که در سطح مقدماتی مفید است:

در تمرین‌هایتان می‌توانید از datetime برای افزودن زمان به خروجی برنامه‌ها، محاسبهٔ روزهای باقی‌مانده تا یک رویداد، یا ثبت تاریخ و زمان انجام یک کار استفاده کنید.

Views: 6

Comments

Please login to add a comment.

Don't have an account? Register now!