🐍 کتابخانه مرجع پایتون

⏰ کار با تاریخ و زمان (datetime)

ماژول datetime یکی از پرکاربردترین ماژول‌های پایتون برای کار با تاریخ و زمان است. با این ماژول می‌توانید تاریخ‌ها را ایجاد، مقایسه، فرمت‌بندی و محاسبه کنید. این مهارت در بسیاری از پروژه‌ها مانند ثبت وقایع، تحلیل داده و برنامه‌های تحت وب ضروری است.

🔹 انواع داده در ماژول datetime

نوع توضیح مثال
date تاریخ (سال، ماه، روز) 2024-12-31
time زمان (ساعت، دقیقه، ثانیه، میکروثانیه) 14:30:45
datetime ترکیب تاریخ و زمان 2024-12-31 14:30:45
timedelta تفاوت بین دو تاریخ یا زمان 5 days, 3:00:00
tzinfo منطقه زمانی (Time Zone) UTC+3:30

🔹 دریافت تاریخ و زمان فعلی

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

کد توضیح مثال
%Y سال ۴ رقمی 2024
%y سال ۲ رقمی 24
%m ماه (۰۱-۱۲) 12
%d روز (۰۱-۳۱) 31
%B نام کامل ماه December
%b نام مختصر ماه Dec
%A نام کامل روز هفته Tuesday
%a نام مختصر روز هفته Tue
%H ساعت (۰۰-۲۳) 14
%I ساعت (۰۱-۱۲) 02
%M دقیقه (۰۰-۵۹) 30
%S ثانیه (۰۰-۵۹) 45
%p AM/PM PM
%w عدد روز هفته (۰-۶, یکشنبه ۰) 2

🔹 تبدیل رشته به تاریخ با 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()
⏳ برای اجرا دکمه را بزنید...

📌 نکات کلیدی

← قبلی: فهرست متوسط → بعدی: کار با JSON ↑ بازگشت به فهرست متوسط