⏰ کار با تاریخ و زمان (datetime)
ماژول datetime یکی از پرکاربردترین ماژولهای پایتون برای کار با تاریخ و زمان است.
با این ماژول میتوانید تاریخها را ایجاد، مقایسه، فرمتبندی و محاسبه کنید.
این مهارت در بسیاری از پروژهها مانند ثبت وقایع، تحلیل داده و برنامههای تحت وب ضروری است.
🔹 انواع داده در ماژول datetime
🔹 دریافت تاریخ و زمان فعلی
import datetime
# تاریخ و زمان فعلی (به همراه میکروثانیه)
now = datetime.datetime.now()
print(f"Now: {now}")
# تاریخ فعلی
today = datetime.date.today()
print(f"Today: {today}")
# زمان فعلی
current_time = datetime.datetime.now().time()
print(f"Current time: {current_time}")
⏳ برای اجرا دکمه را بزنید...
🔹 ایجاد تاریخ و زمان دلخواه
import datetime
# ایجاد تاریخ دلخواه
birthday = datetime.date(2000, 5, 15)
print(f"Birthday: {birthday}")
# ایجاد زمان دلخواه
appointment = datetime.time(14, 30, 45)
print(f"Appointment time: {appointment}")
# ایجاد datetime دلخواه
event = datetime.datetime(2024, 12, 31, 23, 59, 59)
print(f"New Year: {event}")
⏳ برای اجرا دکمه را بزنید...
🔹 فرمتبندی با strftime
strftime (string format time) برای تبدیل تاریخ به رشته با فرمت دلخواه استفاده میشود.
import datetime
now = datetime.datetime.now()
# فرمتهای مختلف
print(now.strftime("%Y-%m-%d")) # 2024-12-31
print(now.strftime("%d/%m/%Y")) # 31/12/2024
print(now.strftime("%B %d, %Y")) # December 31, 2024
print(now.strftime("%A")) # Tuesday
print(now.strftime("%H:%M:%S")) # 14:30:45
print(now.strftime("%I:%M %p")) # 02:30 PM
print(now.strftime("%Y-%m-%d %H:%M:%S")) # 2024-12-31 14:30:45
⏳ برای اجرا دکمه را بزنید...
🔹 جدول کدهای فرمت strftime
🔹 تبدیل رشته به تاریخ با strptime
import datetime
# تبدیل رشته به datetime
date_str = "2024-12-31 14:30:45"
dt = datetime.datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print(f"Parsed datetime: {dt}")
# تبدیل رشته تاریخ ساده
date_str2 = "31/12/2024"
d = datetime.datetime.strptime(date_str2, "%d/%m/%Y")
print(f"Parsed date: {d.date()}")
# مثال با زمان
time_str = "02:30 PM"
t = datetime.datetime.strptime(time_str, "%I:%M %p")
print(f"Parsed time: {t.time()}")
⏳ برای اجرا دکمه را بزنید...
🔹 محاسبه تفاوت زمان با timedelta
import datetime
# تفاوت بین دو تاریخ
date1 = datetime.date(2024, 12, 31)
date2 = datetime.date(2025, 1, 15)
delta = date2 - date1
print(f"Difference: {delta.days} days")
# اضافه کردن زمان به تاریخ
today = datetime.date.today()
one_week_later = today + datetime.timedelta(days=7)
one_month_later = today + datetime.timedelta(days=30)
print(f"Today: {today}")
print(f"One week later: {one_week_later}")
print(f"One month later: {one_month_later}")
# تفاوت زمانی دقیق
now = datetime.datetime.now()
future = now + datetime.timedelta(hours=5, minutes=30)
print(f"Now: {now}")
print(f"5 hours 30 minutes later: {future}")
⏳ برای اجرا دکمه را بزنید...
🔹 استخراج اجزای تاریخ
import datetime
now = datetime.datetime.now()
# استخراج اجزای مختلف
print(f"Year: {now.year}")
print(f"Month: {now.month}")
print(f"Day: {now.day}")
print(f"Hour: {now.hour}")
print(f"Minute: {now.minute}")
print(f"Second: {now.second}")
print(f"Microsecond: {now.microsecond}")
# روز هفته (0=دوشنبه, 6=یکشنبه)
print(f"Weekday (0=Monday): {now.weekday()}")
# روز هفته (1=دوشنبه, 7=یکشنبه)
print(f"Weekday (1=Monday): {now.isoweekday()}")
# شماره هفته در سال
print(f"Week number: {now.isocalendar()[1]}")
⏳ برای اجرا دکمه را بزنید...
🔹 تبدیل به زمان یونیکس (Timestamp)
import datetime
import time
# دریافت timestamp فعلی
timestamp = time.time()
print(f"Current timestamp: {timestamp}")
# تبدیل timestamp به datetime
dt = datetime.datetime.fromtimestamp(timestamp)
print(f"Datetime from timestamp: {dt}")
# تبدیل datetime به timestamp
dt = datetime.datetime(2024, 12, 31, 23, 59, 59)
timestamp = dt.timestamp()
print(f"Timestamp for New Year: {timestamp}")
⏳ برای اجرا دکمه را بزنید...
🔹 مثال جامع: سیستم مدیریت رویدادها
import datetime
class EventManager:
def __init__(self):
self.events = []
def add_event(self, name, date_time, description=""):
"""اضافه کردن رویداد جدید"""
event = {
"name": name,
"date_time": date_time,
"description": description,
"created_at": datetime.datetime.now()
}
self.events.append(event)
print(f"Event '{name}' added successfully!")
def show_events(self, days_ahead=7):
"""نمایش رویدادهای روزهای آینده"""
now = datetime.datetime.now()
future = now + datetime.timedelta(days=days_ahead)
upcoming = [e for e in self.events if now <= e["date_time"] <= future]
if not upcoming:
print(f"No events in the next {days_ahead} days.")
return
print(f"\nUpcoming events (next {days_ahead} days):")
for event in sorted(upcoming, key=lambda e: e["date_time"]):
days_left = (event["date_time"] - now).days
print(f" {event['date_time'].strftime('%Y-%m-%d %H:%M')} - {event['name']} ({days_left} days left)")
if event["description"]:
print(f" Description: {event['description']}")
def show_all_events(self):
"""نمایش همه رویدادها"""
if not self.events:
print("No events found.")
return
print("\nAll events:")
for event in sorted(self.events, key=lambda e: e["date_time"]):
print(f" {event['date_time'].strftime('%Y-%m-%d %H:%M')} - {event['name']}")
# استفاده
manager = EventManager()
# اضافه کردن رویدادها
now = datetime.datetime.now()
manager.add_event("Team Meeting", now + datetime.timedelta(days=2, hours=10))
manager.add_event("Project Deadline", now + datetime.timedelta(days=5, hours=23, minutes=59))
manager.add_event("Birthday Party", now + datetime.timedelta(days=10, hours=18, minutes=30), "Saba's birthday")
# نمایش رویدادهای ۷ روز آینده
manager.show_events(7)
# نمایش همه رویدادها
manager.show_all_events()
⏳ برای اجرا دکمه را بزنید...
📌 نکات کلیدی
- ✅ ماژول
datetimeشاملdate،time،datetime،timedeltaوtzinfoاست. - ✅
datetime.now()تاریخ و زمان فعلی را برمیگرداند. - ✅
strftime()برای فرمتبندی تاریخ به رشته استفاده میشود. - ✅
strptime()برای تبدیل رشته به تاریخ استفاده میشود. - ✅
timedeltaبرای محاسبه تفاوت و افزودن به تاریخ استفاده میشود. - ✅ با
year،month،dayو ... میتوانید اجزای تاریخ را استخراج کنید. - ✅
timestamp()وfromtimestamp()برای تبدیل به زمان یونیکس. - ✅ کار با تاریخ و زمان در تحلیل داده، وب و سیستمهای مدیریتی بسیار مهم است.